diff --git a/.github/workflows/build-npm-release.yml b/.github/workflows/build-npm-release.yml deleted file mode 100644 index b8d378085..000000000 --- a/.github/workflows/build-npm-release.yml +++ /dev/null @@ -1,246 +0,0 @@ -# This workflow will do a clean install of node dependencies, build the source code, -# run unit tests, perform a SonarCloud scan and publish NPM package ONLY on a tagged release. - -# For more information see: -# https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -# Common FOLIO configurable env: -# - YARN_TEST_OPTIONS (options to pass to 'yarn test') -# - SQ_ROOT_DIR (root SQ directory to scan relative to top-level directory) -# - PUBLISH_MOD_DESCRIPTOR (boolean 'true' or 'false') -# - COMPILE_TRANSLATION_FILES (boolean 'true' or 'false') - -name: buildNPM Release -on: - push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+*' - workflow_dispatch: - -jobs: - build-npm-release: - if : ${{ startsWith(github.ref, 'refs/tags/v') }} - env: - YARN_TEST_OPTIONS: '--karma.singleRun --karma.browsers ChromeDocker --karma.reporters mocha junit --coverage' - SQ_ROOT_DIR: './src' - COMPILE_TRANSLATION_FILES: 'true' - PUBLISH_MOD_DESCRIPTOR: 'true' - FOLIO_NPM_REGISTRY: 'https://repository.folio.org/repository/npm-folio/' - FOLIO_MD_REGISTRY: 'https://folio-registry.dev.folio.org' - NODEJS_VERSION: '18' - JEST_JUNIT_OUTPUT_DIR: 'artifacts/jest-junit' - JEST_COVERAGE_REPORT_DIR: 'artifacts/coverage-jest/lcov-report/' - BIGTEST_JUNIT_OUTPUT_DIR: 'artifacts/runTest' - BIGTEST_COVERAGE_REPORT_DIR: 'artifacts/coverage/lcov-report/' - OKAPI_PULL: '{ "urls" : [ "https://folio-registry.dev.folio.org" ] }' - SQ_LCOV_REPORT: 'artifacts/coverage-jest/lcov.info' - SQ_EXCLUSIONS: '**/platform/alias-service.js,**/docs/**,**/node_modules/**,**/examples/**,**/artifacts/**,**/ci/**,Jenkinsfile,**/LICENSE,**/*.css,**/*.md,**/*.json,**/tests/**,**/stories/*.js,**/test/**,**/.stories.js,**/resources/bigtest/interactors/**,**/resources/bigtest/network/**,**/*-test.js,**/*.test.js,**/*-spec.js,**/karma.conf.js,**/jest.config.js' - - runs-on: ubuntu-latest - steps: - - uses: folio-org/checkout@v2 - with: - fetch-depth: 0 - - # Runs a single command using the runners shell - - name: Print tag info - run: echo "Building release tag, ${GITHUB_REF}" - - - name: Set TAG_VERSION - run: echo "TAG_VERSION=$(echo ${GITHUB_REF#refs/tags/v})" >> $GITHUB_ENV - - - name: Get version from package.json - id: package_version - uses: notiz-dev/github-action-json-property@release - with: - path: 'package.json' - prop_path: 'version' - - - name: Check matching tag and version in package.json - if: ${{ env.TAG_VERSION != steps.package_version.outputs.prop }} - run: | - echo "Tag version, ${TAG_VERSION}, does not match package.json version, ${PACKAGE_VERSION}." - exit 1 - env: - PACKAGE_VERSION: ${{ steps.package_version.outputs.prop }} - - - name: Setup kernel for react native, increase watchers - run: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p - - name: Use Node.js - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODEJS_VERSION }} - check-latest: true - always-auth: true - - - name: Set yarn config - run: yarn config set @folio:registry $FOLIO_NPM_REGISTRY - - - name: Run yarn install - run: yarn install --ignore-scripts - - - name: Run yarn list - run: yarn list --pattern @folio - - - name: Run yarn lint - run: yarn lint - continue-on-error: true - - - name: Run yarn test - run: xvfb-run --server-args="-screen 0 1024x768x24" yarn test $YARN_TEST_OPTIONS - - - name: Run yarn formatjs-compile - if: ${{ env.COMPILE_TRANSLATION_FILES == 'true' }} - run: yarn formatjs-compile - - - name: Generate FOLIO module descriptor - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} - run: yarn build-mod-descriptor - - - name: Print FOLIO module descriptor - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} - run: cat module-descriptor.json - - - name: Read module descriptor - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} - id: moduleDescriptor - uses: juliangruber/read-file-action@v1 - with: - path: ./module-descriptor.json - - - name: Docker registry login - run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login https://docker.io/v2/ -u "${{ secrets.DOCKER_USER }}" --password-stdin - - - name: Start a local instance of Okapi - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} - run: | - docker pull folioorg/okapi:latest - docker run --name okapi -t -detach folioorg/okapi:latest dev - echo "OKAPI_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' okapi)" >> $GITHUB_ENV - sleep 10 - - - name: Pull all Module descriptors to local Okapi instance - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} - uses: fjogeleit/http-request-action@master - with: - url: http://${{ env.OKAPI_IP }}:9130/_/proxy/pull/modules - method: 'POST' - contentType: 'application/json; charset=utf-8' - customHeaders: '{ "Accept": "application/json; charset=utf-8" }' - data: ${{ env.OKAPI_PULL }} - timeout: 60000 - - - name: Perform local Okapi dependency check - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} - uses: fjogeleit/http-request-action@master - with: - url: http://${{ env.OKAPI_IP }}:9130/_/proxy/modules?preRelease=false&npmSnapshot=false - method: 'POST' - contentType: 'application/json; charset=utf-8' - customHeaders: '{ "Accept": "application/json; charset=utf-8" }' - data: ${{ steps.moduleDescriptor.outputs.content }} - - - name: Publish Jest unit test results - uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v1 - if: always() - with: - github_token: ${{ github.token }} - files: "${{ env.JEST_JUNIT_OUTPUT_DIR }}/*.xml" - check_name: Jest Unit Test Results - comment_mode: update last - comment_title: Jest Unit Test Statistics - - - name: Publish Jest coverage report - uses: actions/upload-artifact@v2 - if: always() - with: - name: jest-coverage-report - path: ${{ env.JEST_COVERAGE_REPORT_DIR }} - retention-days: 30 - - - name: Publish BigTest unit test results - uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v1 - if: always() - with: - github_token: ${{ github.token }} - files: "${{ env.BIGTEST_JUNIT_OUTPUT_DIR }}/*.xml" - check_name: BigTest Unit Test Results - comment_mode: update last - comment_title: BigTest Unit Test Statistics - - - name: Publish BigTest coverage report - uses: actions/upload-artifact@v2 - if: always() - with: - name: bigtest-coverage-report - path: ${{ env.BIGTEST_COVERAGE_REPORT_DIR }} - retention-days: 30 - - - name: Publish yarn.lock - uses: actions/upload-artifact@v2 - if: failure() - with: - name: yarn.lock - path: yarn.lock - retention-days: 5 - - - name: Set default branch as env variable - run: echo "DEFAULT_BRANCH=${{ github.event.repository.default_branch }}" >> $GITHUB_ENV - - - name: Fetch branches for SonarCloud - run: git fetch --no-tags ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} +refs/heads/${{ env.DEFAULT_BRANCH }}:refs/remotes/origin/${{ env.DEFAULT_BRANCH }} - - - name: Run SonarCloud scan - uses: sonarsource/sonarcloud-github-action@master - with: - args: > - -Dsonar.organization=folio-org - -Dsonar.projectKey=org.folio:${{ github.event.repository.name }} - -Dsonar.projectName=${{ github.event.repository.name }} - -Dsonar.sources=${{ env.SQ_ROOT_DIR }} - -Dsonar.language=js - -Dsonar.javascript.lcov.reportPaths=${{ env.SQ_LCOV_REPORT }} - -Dsonar.exclusions=${{ env.SQ_EXCLUSIONS }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - - - name: Set up NPM environment for publishing - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODEJS_VERSION }} - check-latest: true - always-auth: true - - - name: Set _auth in .npmrc - run: | - npm config set @folio:registry $FOLIO_NPM_REGISTRY - npm config set //repository.folio.org/repository/npm-folio/:_auth $NODE_AUTH_TOKEN - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Exclude some CI-generated artifacts in package - run: | - echo "artifacts" >> .npmignore - echo ".github" >> .npmignore - echo ".scannerwork" >> .npmignore - cat .npmignore - - - name: Publish NPM to FOLIO NPM registry - run: npm publish - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish module descriptor to FOLIO registry - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} - id: modDescriptorPost - uses: fjogeleit/http-request-action@master - with: - url: ${{ env.FOLIO_MD_REGISTRY }}/_/proxy/modules - method: 'POST' - contentType: 'application/json; charset=utf-8' - customHeaders: '{ "Accept": "application/json; charset=utf-8" }' - data: ${{ steps.moduleDescriptor.outputs.content }} - username: ${{ secrets.FOLIO_REGISTRY_USERNAME }} - password: ${{ secrets.FOLIO_REGISTRY_PASSWORD }} - diff --git a/.github/workflows/build-npm.yml b/.github/workflows/build-npm.yml deleted file mode 100644 index 860bd77de..000000000 --- a/.github/workflows/build-npm.yml +++ /dev/null @@ -1,201 +0,0 @@ -# -# This workflow will do a clean install of node dependencies, build the source code, -# run unit tests, perform a Sonarqube scan, and publish NPM artifacts from master/main. - - -# For more information see: -# https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -# Common FOLIO configurable environment variables to set: -# - YARN_TEST_OPTIONS (options to pass to 'yarn test') -# - SQ_ROOT_DIR (root SQ directory to scan relative to top-level directory) -# - PUBLISH_MOD_DESCRIPTOR (boolean 'true' or 'false') -# - COMPILE_TRANSLATION_FILES (boolean 'true' or 'false') - - -name: buildNPM Snapshot -on: [push, pull_request] - -jobs: - build-npm: - env: - YARN_TEST_OPTIONS: '--karma.singleRun --karma.browsers ChromeDocker --karma.reporters mocha junit --coverage' - SQ_ROOT_DIR: './src' - COMPILE_TRANSLATION_FILES: 'true' - PUBLISH_MOD_DESCRIPTOR: 'true' - FOLIO_NPM_REGISTRY: 'https://repository.folio.org/repository/npm-folioci/' - FOLIO_MD_REGISTRY: 'https://folio-registry.dev.folio.org' - NODEJS_VERSION: '18' - JEST_JUNIT_OUTPUT_DIR: 'artifacts/jest-junit' - JEST_COVERAGE_REPORT_DIR: 'artifacts/coverage-jest/lcov-report/' - BIGTEST_JUNIT_OUTPUT_DIR: 'artifacts/runTest' - BIGTEST_COVERAGE_REPORT_DIR: 'artifacts/coverage/lcov-report/' - SQ_LCOV_REPORT: 'artifacts/coverage-jest/lcov.info' - SQ_EXCLUSIONS: '**/platform/alias-service.js,**/docs/**,**/node_modules/**,**/examples/**,**/artifacts/**,**/ci/**,Jenkinsfile,**/LICENSE,**/*.css,**/*.md,**/*.json,**/tests/**,**/stories/*.js,**/test/**,**/.stories.js,**/resources/bigtest/interactors/**,**/resources/bigtest/network/**,**/*-test.js,**/*.test.js,**/*-spec.js,**/karma.conf.js,**/jest.config.js' - - runs-on: ubuntu-latest - steps: - - uses: folio-org/checkout@v2 - with: - fetch-depth: 0 - - - name: Setup kernel for react native, increase watchers - run: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p - - name: Use Node.js - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODEJS_VERSION }} - check-latest: true - always-auth: true - - - name: Set yarn config - run: yarn config set @folio:registry $FOLIO_NPM_REGISTRY - - - name: Set FOLIO NPM snapshot version - run: | - git clone https://github.com/folio-org/folio-tools.git - npm --no-git-tag-version version `folio-tools/github-actions-scripts/folioci_npmver.sh` - rm -rf folio-tools - env: - JOB_ID: ${{ github.run_number }} - - - name: Run yarn install - run: yarn install --ignore-scripts - - - name: Run yarn list - run: yarn list --pattern @folio - - - name: Run yarn lint - run: yarn lint - continue-on-error: true - - - name: Run yarn formatjs-compile - if : ${{ env.COMPILE_TRANSLATION_FILES == 'true' }} - run: yarn formatjs-compile - - - name: Run yarn test - run: xvfb-run --server-args="-screen 0 1024x768x24" yarn test $YARN_TEST_OPTIONS - - - name: Generate FOLIO module descriptor - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} - run: yarn build-mod-descriptor - - - name: Print FOLIO module descriptor - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} - run: cat module-descriptor.json - - - name: Publish Jest unit test results - uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v1 - if: always() - with: - github_token: ${{ github.token }} - files: "${{ env.JEST_JUNIT_OUTPUT_DIR }}/*.xml" - check_name: Jest Unit Test Results - comment_mode: update last - comment_title: Jest Unit Test Statistics - - - name: Publish Jest coverage report - uses: actions/upload-artifact@v2 - if: always() - with: - name: jest-coverage-report - path: ${{ env.JEST_COVERAGE_REPORT_DIR }} - retention-days: 30 - - - name: Publish BigTest unit test results - uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v1 - if: always() - with: - github_token: ${{ github.token }} - files: "${{ env.BIGTEST_JUNIT_OUTPUT_DIR }}/*.xml" - check_name: BigTest Unit Test Results - comment_mode: update last - comment_title: BigTest Unit Test Statistics - - - name: Publish BigTest coverage report - uses: actions/upload-artifact@v2 - if: always() - with: - name: bigtest-coverage-report - path: ${{ env.BIGTEST_COVERAGE_REPORT_DIR }} - retention-days: 30 - - - name: Publish yarn.lock - uses: actions/upload-artifact@v2 - if: failure() - with: - name: yarn.lock - path: yarn.lock - retention-days: 5 - - - name: Set default branch as env variable - run: echo "DEFAULT_BRANCH=${{ github.event.repository.default_branch }}" >> $GITHUB_ENV - - - name: Fetch branches for SonarCloud - run: git fetch --no-tags ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} +refs/heads/${{ env.DEFAULT_BRANCH }}:refs/remotes/origin/${{ env.DEFAULT_BRANCH }} - - - name: Run SonarCloud scan - uses: sonarsource/sonarcloud-github-action@master - with: - args: > - -Dsonar.organization=folio-org - -Dsonar.projectKey=org.folio:${{ github.event.repository.name }} - -Dsonar.projectName=${{ github.event.repository.name }} - -Dsonar.sources=${{ env.SQ_ROOT_DIR }} - -Dsonar.language=js - -Dsonar.javascript.lcov.reportPaths=${{ env.SQ_LCOV_REPORT }} - -Dsonar.exclusions=${{ env.SQ_EXCLUSIONS }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - - - name: Set up NPM environment for publishing - if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODEJS_VERSION }} - check-latest: true - always-auth: true - - - name: Set _auth in .npmrc - if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} - run: | - npm config set @folio:registry $FOLIO_NPM_REGISTRY - npm config set //repository.folio.org/repository/npm-folioci/:_auth $NODE_AUTH_TOKEN - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Exclude some CI-generated artifacts in package - if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} - run: | - echo "artifacts" >> .npmignore - echo ".github" >> .npmignore - echo ".scannerwork" >> .npmignore - cat .npmignore - - - name: Publish NPM - if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} - run: npm publish - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Read module descriptor - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' && github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} - id: moduleDescriptor - uses: juliangruber/read-file-action@v1 - with: - path: ./module-descriptor.json - - - name: Publish module descriptor - if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' && github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} - id: modDescriptorPost - uses: fjogeleit/http-request-action@master - with: - url: ${{ env.FOLIO_MD_REGISTRY }}/_/proxy/modules - method: 'POST' - contentType: 'application/json; charset=utf-8' - customHeaders: '{ "Accept": "application/json; charset=utf-8" }' - data: ${{ steps.moduleDescriptor.outputs.content }} - username: ${{ secrets.FOLIO_REGISTRY_USERNAME }} - password: ${{ secrets.FOLIO_REGISTRY_PASSWORD }} - diff --git a/.github/workflows/ui.yml b/.github/workflows/ui.yml new file mode 100644 index 000000000..7048dca2e --- /dev/null +++ b/.github/workflows/ui.yml @@ -0,0 +1,16 @@ +name: Centralized workflow +on: + - push + - pull_request + - workflow_dispatch + +jobs: + ui: + uses: folio-org/.github/.github/workflows/ui.yml@v1.1 + secrets: inherit + with: + jest-enabled: true + jest-test-command: yarn run test:jest + bigtest-enabled: true + bigtest-test-command: xvfb-run --server-args="-screen 0 1024x768x24" yarn run test:bigtest $YARN_TEST_OPTIONS --karma.singleRun --karma.browsers ChromeDocker --karma.reporters mocha junit --coverage + diff --git a/package.json b/package.json index 39ad59df2..bc16b0811 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "start": "stripes serve", "test": "yarn run test:jest && yarn run test:bigtest ", "test:bigtest": "stripes test karma", + "test:bt-dev": "stripes test karma --watch", "test:jest": "jest --ci --coverage --colors", "lint": "eslint . && stylelint \"src/**/*.css\"", "eslint": "eslint .", @@ -43,19 +44,19 @@ "@bigtest/convergence": "^0.10.0", "@bigtest/interactor": "^0.7.2", "@bigtest/mirage": "^0.0.1", - "@bigtest/mocha": "^0.5.1", "@folio/eslint-config-stripes": "^7.0.0", "@folio/jest-config-stripes": "^2.0.0", "@folio/stripes-cli": "^3.0.0", "@folio/stripes-components": "^12.2.0", "@folio/stripes-connect": "^9.0.0", "@folio/stripes-logger": "^1.0.0", - "@folio/stripes-testing": "^3.1.0", + "@folio/stripes-testing": "^4.5.0", "@formatjs/cli": "^6.1.3", "chai": "^4.1.2", "eslint": "^7.32.0", "jest-fetch-mock": "^3.0.3", "miragejs": "^0.1.32", + "mocha": "^10.2.0", "moment": "^2.29.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/src/components/AppIcon/tests/appIcon-test.js b/src/components/AppIcon/tests/appIcon-test.js index 990d49cc1..822b2b080 100644 --- a/src/components/AppIcon/tests/appIcon-test.js +++ b/src/components/AppIcon/tests/appIcon-test.js @@ -3,7 +3,7 @@ */ import React from 'react'; -import { beforeEach, it, describe } from '@bigtest/mocha'; +import { beforeEach, it, describe } from 'mocha'; import { expect } from 'chai'; import { mount } from '../../../../test/bigtest/helpers/render-helpers'; diff --git a/src/components/MainNav/AppList/components/ResizeContainer/tests/ResizeContainer-test.js b/src/components/MainNav/AppList/components/ResizeContainer/tests/ResizeContainer-test.js index 74e80fe94..2d94d2de4 100644 --- a/src/components/MainNav/AppList/components/ResizeContainer/tests/ResizeContainer-test.js +++ b/src/components/MainNav/AppList/components/ResizeContainer/tests/ResizeContainer-test.js @@ -4,7 +4,7 @@ /* eslint-disable react/prop-types */ import React from 'react'; import times from 'lodash/times'; -import { beforeEach, it, describe } from '@bigtest/mocha'; +import { beforeEach, it, describe } from 'mocha'; import { expect } from 'chai'; import { mount } from '../../../../../../../test/bigtest/helpers/render-helpers'; diff --git a/src/components/MainNav/AppList/tests/AppList-test.js b/src/components/MainNav/AppList/tests/AppList-test.js index e25bc80e4..0660bd6dc 100644 --- a/src/components/MainNav/AppList/tests/AppList-test.js +++ b/src/components/MainNav/AppList/tests/AppList-test.js @@ -4,18 +4,49 @@ import React from 'react'; import { BrowserRouter } from 'react-router-dom'; -import { beforeEach, it, describe } from '@bigtest/mocha'; -import { expect } from 'chai'; +import { beforeEach, it, describe } from 'mocha'; +import { HTML, Bigtest } from '@folio/stripes-testing'; import { mountWithContext } from '../../../../../test/bigtest/helpers/render-helpers'; import AppList from '../AppList'; -import AppListInteractor from './interactor'; +// import AppListInteractor from './interactor'; import apps from './apps'; import selectedApp from './selectedApp'; +const AppDropdownInteractor = HTML.extend('app dropdown') + .selector('[data-test-app-list]') + .filters({ + itemCount: el => el.querySelectorAll('[class^=navItem--]').length, + }) + .actions({ + focusDropdownTrigger: ({ find }) => find(Bigtest.Button('Apps')).focus(), + clickDropdownTrigger: ({ find }) => find(Bigtest.Button('Apps')).click() + }); + +const AppNavMenuItem = HTML.extend('app dropdown item') + .selector('[data-test-nav-list-item]') + .locator(el => el.textContent); + +const AppMenuInteractor = HTML.extend('app menu') + .selector('[class^=DropdownMenu]') + .filters({ + itemCount: el => el.querySelectorAll('[data-test-item-link]').length, + focusedIndex: el => { + if (!el.querySelector(':focus')) return -1; + const focused = el.querySelector(':focus'); + return [...focused.parentNode.children].indexOf(focused); + } + }) + .actions({ + clickItem: async ({ find }, label) => { + await find(AppNavMenuItem(label)).click(); + } + }); + describe('AppList', () => { - const appList = new AppListInteractor(); + const appsNav = AppDropdownInteractor(); + const appsDropdown = AppMenuInteractor(); beforeEach(async () => { await mountWithContext( @@ -29,9 +60,7 @@ describe('AppList', () => { ); }); - it(`Should render ${apps.length} nav items`, () => { - expect(appList.itemsCount).to.equal(apps.length); - }); + it(`Should render ${apps.length} nav items`, () => appsNav.has({ itemCount: apps.length })); describe('opening the appList with a selected app', () => { beforeEach(async () => { @@ -47,19 +76,17 @@ describe('AppList', () => { ); - await appList.dropdownToggle.focus(); - await appList.dropdownToggle.click(); + await appsNav.focusDropdownTrigger(); + await appsNav.clickDropdownTrigger(); }); - it('focuses the corresponding item for the selected app', () => { - expect(document.activeElement).to.not.equal(null); - }); + it('focuses the corresponding item for the selected app', () => AppMenuInteractor({ focusedIndex: -1 }).absent()); describe('if the selected app is not present in the list', () => { beforeEach(async () => { await mountWithContext( // Simulate very small screen -
+
{
); - await appList.dropdownToggle.$root.focus(); - await appList.when(() => appList.dropdownToggle.isFocused); - await appList.dropdownToggle.click(); + await appsNav.focusDropdownTrigger(); + await appsNav.clickDropdownTrigger(); }); - it('focuses the first item in the list', () => { - expect(document.activeElement.id).to.equal(appList.dropdownMenu.items(0).id); - }); + it('focuses the first item in the list', () => appsDropdown.has({ focusedIndex: 0 })); }); }); @@ -93,9 +117,7 @@ describe('AppList', () => { ); }); - it('Should not render the AppList', () => { - expect(appList.isPresent).to.equal(false); - }); + it('Should not render the AppList', () => appsDropdown.absent()); }); describe('If the screen width is small and there are hidden apps', () => { @@ -111,31 +133,22 @@ describe('AppList', () => {
); - await appList.dropdownToggle.$root.focus(); - await appList.when(() => appList.dropdownToggle.isFocused); - await appList.dropdownToggle.click(); + await appsNav.focusDropdownTrigger(); + await appsNav.clickDropdownTrigger(); }); - it('Should render the "all apps" button', () => { - expect(appList.dropdownToggle.isPresent).to.equal(true); - }); + it('Should render the "all apps" button', () => appsNav.exists()); - it('Should show the apps dropdown on button click', () => { - expect(appList.dropdownMenu.isVisible).to.equal(true); - }); + it('Should show the apps dropdown on button click', () => appsDropdown.exists()); - it('Should focus the first item in the dropdown if there is no current app', () => { - expect(appList.dropdownMenu.items(0).isFocused).to.equal(true); - }); + it('Should focus the first item in the dropdown if there is no current app', () => appsDropdown.has({ focusedIndex: 0 })); describe('Clicking an item inside the app list dropdown', () => { beforeEach(async () => { - await appList.dropdownMenu.items(0).click(); + await appsDropdown.clickItem('Inventory'); }); - it('Should close the app dropdown and focus the dropdown toggle', () => { - expect(appList.dropdownToggle.isFocused).to.equal(true); - }); + it('Should close the app dropdown and focus the dropdown toggle', () => Bigtest.Button('Apps').is({ focused: true })); }); }); }); diff --git a/src/components/Root/FXHR.test.js b/src/components/Root/FXHR.test.js index c5d5efed9..5c52ee602 100644 --- a/src/components/Root/FXHR.test.js +++ b/src/components/Root/FXHR.test.js @@ -1,6 +1,5 @@ import { rtr } from './token-util'; import { getTokenExpiry } from '../../loginServices'; -import { RTRError } from './Errors'; import FXHR from './FXHR'; jest.mock('./token-util', () => ({ diff --git a/src/components/Root/token-util.test.js b/src/components/Root/token-util.test.js index c103df9c1..4463ec97a 100644 --- a/src/components/Root/token-util.test.js +++ b/src/components/Root/token-util.test.js @@ -1,4 +1,3 @@ -import { waitFor } from '@folio/jest-config-stripes/testing-library/react'; import { RTRError, UnexpectedResourceError } from './Errors'; import { configureRtr, diff --git a/src/components/SSOLogin/tests/SSOLogin-test.js b/src/components/SSOLogin/tests/SSOLogin-test.js index 587525b46..ef705fb28 100644 --- a/src/components/SSOLogin/tests/SSOLogin-test.js +++ b/src/components/SSOLogin/tests/SSOLogin-test.js @@ -1,6 +1,6 @@ import React from 'react'; import { expect } from 'chai'; -import { beforeEach, it, describe } from '@bigtest/mocha'; +import { beforeEach, it, describe } from 'mocha'; import ButtonInteractor from '@folio/stripes-components/lib/Button/tests/interactor'; import Harness from '../../../../test/bigtest/helpers/Harness'; diff --git a/src/components/TitleManager/TitleManager.test.js b/src/components/TitleManager/TitleManager.test.js new file mode 100644 index 000000000..f6b6af776 --- /dev/null +++ b/src/components/TitleManager/TitleManager.test.js @@ -0,0 +1,75 @@ +import { render, waitFor } from '@folio/jest-config-stripes/testing-library/react'; +import { createMemoryHistory } from 'history'; + +import TitleManager from './TitleManager'; +import Harness from '../../../test/jest/helpers/harness'; + +describe('TitleManager', () => { + it('renders a title with a default postfix', async () => { + const stripes = { + config: {}, + hasPerm: jest.fn(), + }; + + const page = 'record-application'; + + const history = createMemoryHistory(); + render( + + + <>thunder - chicken + + + ); + + await waitFor(() => expect(document.title).toBe(`${page} - FOLIO`)); + }); + + it('renders prefix, page, record, postfix', async () => { + const stripes = { + config: { + platformName: 'two mile', + }, + hasPerm: jest.fn(), + }; + + const prefix = 'pre'; + const page = 'steve'; + const record = '8:41.5'; + + const history = createMemoryHistory(); + render( + + + <>thunder - chicken + + + ); + + await waitFor(() => expect(document.title).toBe(`${prefix}${page} - ${record} - ${stripes.config.platformName}`)); + }); + + + it('renders prefix, record, postfix', async () => { + const stripes = { + config: { + platformName: 'two mile', + }, + hasPerm: jest.fn(), + }; + + const prefix = 'pre'; + const record = '8:41.5'; + + const history = createMemoryHistory(); + render( + + + <>thunder - chicken + + + ); + + await waitFor(() => expect(document.title).toBe(`${prefix}${record} - ${stripes.config.platformName}`)); + }); +}); diff --git a/src/okapiReducer.test.js b/src/okapiReducer.test.js index d1c5ffe6d..5c0cb8021 100644 --- a/src/okapiReducer.test.js +++ b/src/okapiReducer.test.js @@ -13,7 +13,7 @@ describe('okapiReducer', () => { rtrModalIsVisible: true, rtrTimeout: 123, }; - const ct = jest.spyOn(window, 'clearTimeout') + const ct = jest.spyOn(window, 'clearTimeout'); const o = okapiReducer(state, { type: 'SET_IS_AUTHENTICATED', isAuthenticated: false }); expect(o.isAuthenticated).toBe(false); expect(o.rtrModalIsVisible).toBe(false); diff --git a/src/validators/validateEmail/validateEmail.js b/src/validators/validateEmail/validateEmail.js index 66e379143..49b296bf9 100644 --- a/src/validators/validateEmail/validateEmail.js +++ b/src/validators/validateEmail/validateEmail.js @@ -1,3 +1,11 @@ +/** + * validate an email address + * Email address validation is notoriously difficult. I don't know where this + * particular regex came from but it shares substantially with well-known + * versions such as https://emailregex.com/ and does a good enough job for us. + * + * This was introduced in STCOR-276/PR #496 + */ export default email => { // eslint-disable-next-line no-useless-escape const emailRegExp = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; diff --git a/src/validators/validateEmail/validateEmail.test.js b/src/validators/validateEmail/validateEmail.test.js new file mode 100644 index 000000000..8ace387c6 --- /dev/null +++ b/src/validators/validateEmail/validateEmail.test.js @@ -0,0 +1,23 @@ +import validateEmail from './validateEmail'; + +describe('validateEmail', () => { + it('accepts valid email addresses', () => { + expect(validateEmail('test@example.edu')).toBe(true); + }); + + it('accepts values with comments in username', () => { + expect(validateEmail('test+comment@example.edu')).toBe(true); + }); + + it('rejects values without @', () => { + expect(validateEmail('test$example.edu')).toBe(false); + }); + + it('rejects values without domain suffix', () => { + expect(validateEmail('test@example')).toBe(false); + }); + + it('rejects values with whitespace', () => { + expect(validateEmail(' test@example.com ')).toBe(false); + }); +}); diff --git a/src/validators/validateForgotUsernameForm/validateForgotUsernameForm.test.js b/src/validators/validateForgotUsernameForm/validateForgotUsernameForm.test.js new file mode 100644 index 000000000..d5563ddd0 --- /dev/null +++ b/src/validators/validateForgotUsernameForm/validateForgotUsernameForm.test.js @@ -0,0 +1,36 @@ +import validateForgotUsernameForm from './validateForgotUsernameForm'; + +describe('validateForgotUsernameForm', () => { + describe('accepts valid email addresses and phone numbers', () => { + it('accepts valid email addresses', () => { + expect(validateForgotUsernameForm('test@example.edu')).toBe(true); + }); + + it('accepts values with comments in username', () => { + expect(validateForgotUsernameForm('test+comment@example.edu')).toBe(true); + }); + + it('accepts values with numbers only', () => { + expect(validateForgotUsernameForm('12')).toBe(true); + }); + + it('accepts values with numbers and dashes', () => { + expect(validateForgotUsernameForm('1-2')).toBe(true); + }); + + it('accepts values with numbers and dots', () => { + expect(validateForgotUsernameForm('1.2')).toBe(true); + }); + }); + + it('rejects values that are not valid email addresses or phone numbers', () => { + // validateForgotUsernameForm trims whitespace so we don't test for + // whitespace rejection here, even though other validators do. + expect(validateForgotUsernameForm('not an email address')).toBe(false); + expect(validateForgotUsernameForm('not a phone number')).toBe(false); + expect(validateForgotUsernameForm('test$example.edu')).toBe(false); + expect(validateForgotUsernameForm('test@example')).toBe(false); + expect(validateForgotUsernameForm('1.2a')).toBe(false); + expect(validateForgotUsernameForm('1.2!')).toBe(false); + }); +}); diff --git a/src/validators/validatePhoneNumber/validatePhoneNumber.test.js b/src/validators/validatePhoneNumber/validatePhoneNumber.test.js new file mode 100644 index 000000000..7f9eebe45 --- /dev/null +++ b/src/validators/validatePhoneNumber/validatePhoneNumber.test.js @@ -0,0 +1,22 @@ +import validatePhoneNumber from './validatePhoneNumber'; + +describe('validatePhoneNumber', () => { + it('accepts values with numbers only', () => { + expect(validatePhoneNumber('12')).toBe(true); + }); + + it('accepts values with numbers and dashes', () => { + expect(validatePhoneNumber('1-2')).toBe(true); + }); + + it('accepts values with numbers and dots', () => { + expect(validatePhoneNumber('1.2')).toBe(true); + }); + + it('rejects values containing characters other than numbers, dashes, and dots', () => { + expect(validatePhoneNumber('1.2 ')).toBe(false); + expect(validatePhoneNumber('1.2a')).toBe(false); + expect(validatePhoneNumber('1.2!')).toBe(false); + }); +}); + diff --git a/test/bigtest/helpers/always.js b/test/bigtest/helpers/always.js new file mode 100644 index 000000000..f978c2848 --- /dev/null +++ b/test/bigtest/helpers/always.js @@ -0,0 +1,22 @@ +/* based around convergeance, this tests that an assertion passes over a period of time, +* rather than exiting on the first non-throw pass (as converge from @folio/stripes-testing does). +*/ + +export default (trial) => { + const duration = 200; + return async () => { + const startTime = performance.now(); + while (true) { // eslint-disable-line no-constant-condition + // run the trial - if it throws over the duration, it will fail. + trial(); + const diff = performance.now() - startTime; + if (diff > duration) { + // the duration has run and no failures... pass! + break; + } else { + // try again in 1ms... + await new Promise((resolve) => setTimeout(resolve, 1)); + } + } + }; +}; diff --git a/test/bigtest/helpers/setup-application-components.js b/test/bigtest/helpers/setup-application-components.js index 268a23548..940357097 100644 --- a/test/bigtest/helpers/setup-application-components.js +++ b/test/bigtest/helpers/setup-application-components.js @@ -1,4 +1,4 @@ -import { beforeEach } from '@bigtest/mocha'; +import { beforeEach } from 'mocha'; import setupStripesCore from './setup-application'; import { diff --git a/test/bigtest/helpers/setup-application.js b/test/bigtest/helpers/setup-application.js index a1b15d139..c54aa590c 100644 --- a/test/bigtest/helpers/setup-application.js +++ b/test/bigtest/helpers/setup-application.js @@ -1,4 +1,5 @@ -import { beforeEach } from '@bigtest/mocha'; +import ReactDOM from 'react-dom'; +import { beforeEach } from 'mocha'; import localforage from 'localforage'; import { reset } from '@folio/stripes-connect'; diff --git a/test/bigtest/helpers/stripes-config.js b/test/bigtest/helpers/stripes-config.js index dbfe07b4f..9295bdbd5 100644 --- a/test/bigtest/helpers/stripes-config.js +++ b/test/bigtest/helpers/stripes-config.js @@ -74,13 +74,29 @@ export function clearConfig() { assign(stripes.config, originalConfig); } +export function clearAllCookies() { + const cookies = document.cookie.split(';'); + + cookies.forEach((c) => { + const eqPos = c.indexOf('='); + if (eqPos !== -1) { + const name = c.substring(0, eqPos); + document.cookie = `${name}=;max-age=0`; + } + }); +} + /** * setCookies * Set the given object as cookies * @arg cookies object: keys and values are both strings */ export function setCookies(cookies) { - document.cookie = Object.entries(cookies).map(([key, val]) => (`${key}=${val}`)).join(';'); + if (Object.entries(cookies).length > 0) { + document.cookie = Object.entries(cookies).map(([key, val]) => (`${key}=${val}`)).join(';'); + } else { + clearAllCookies(); + } } /** diff --git a/test/bigtest/interactors/common.js b/test/bigtest/interactors/common.js new file mode 100644 index 000000000..997286417 --- /dev/null +++ b/test/bigtest/interactors/common.js @@ -0,0 +1,30 @@ +import { + HTML, + Button, + TextField, +} from '@folio/stripes-testing'; + +import translations from '../../../translations/stripes-core/en'; + +export const Login = HTML.extend('login form') + .selector('[class^=form--]') + .locator(el => el.querySelector('h1').innerText) + .filters({ + errorMessage: el => el.querySelector('[data-test-message-banner]') !== null, + submitDisabled: Button({ text: 'Log in', disabled: true }).exists() + }) + .actions({ + fillIn: async ({ find }, values) => { + await find(TextField({ id: 'input-username' })).fillIn(values.username); + await find(TextField({ id: 'input-password' })).fillIn(values.password); + await find(Button(translations['title.login'])).click(); + } + }); + +export const StatusPage = HTML.extend('status page') + .selector('[data-test-status-page]') + .filters({ + headingText: el => el.querySelector('[data-test-h1]')?.textContent || '', + notificationText: el => el.querySelector('[data-test-p-notification]')?.textContent || '', + cautionText: el => el.querySelector('[data-test-p-caution]')?.textContent || '', + }); diff --git a/test/bigtest/tests/CurrentApp-test.js b/test/bigtest/tests/CurrentApp-test.js index fc8d42c87..7ff85fe8e 100644 --- a/test/bigtest/tests/CurrentApp-test.js +++ b/test/bigtest/tests/CurrentApp-test.js @@ -3,11 +3,18 @@ */ import React from 'react'; -import { before, beforeEach, it, describe } from '@bigtest/mocha'; -import { expect } from 'chai'; +import { before, beforeEach, it, describe } from 'mocha'; +import { Bigtest, DropdownMenu, including } from '@folio/stripes-testing'; import setupApplication from '../helpers/setup-application'; import AppContextMenu from '../../../src/components/MainNav/CurrentApp/AppContextMenu'; -import CurrentAppInteractor from '../interactors/CurrentApp'; + +const { Link, Button } = Bigtest; + +const HomeButton = Link.extend('home button') + .selector('[data-test-current-app-home-button]') + .filters({ + ariaLabel: el => el.ariaLabel + }); const DummyAppWithContextMenu = () => (
@@ -24,7 +31,8 @@ const DummyAppWithContextMenu = () => ( const DummyAppWithoutContextMenu = () =>
; describe('CurrentApp', () => { - const currentApp = new CurrentAppInteractor(); + const homeButton = HomeButton('Dummy app without context menu'); + const contextDropdownToggle = Button(including('Dummy app with context menu')); before(async () => { await new Promise((resolve) => { @@ -60,18 +68,14 @@ describe('CurrentApp', () => { await this.visit('/dummy-app-with-app-context-menu'); }); - it('Should render a context menu toggle button', () => { - expect(currentApp.contextMenuToggleButton.isPresent).to.equal(true); - }); + it('Should render a context menu toggle button', () => contextDropdownToggle.exists()); describe('Clicking the context menu toggle button', () => { beforeEach(async () => { - await currentApp.contextMenuToggleButton.click(); + await contextDropdownToggle.click(); }); - it('Should open the app context menu dropdown', () => { - expect(currentApp.contextMenu.isPresent).to.equal(true); - }); + it('Should open the app context menu dropdown', () => DropdownMenu().exists()); }); }); @@ -80,19 +84,14 @@ describe('CurrentApp', () => { await this.visit('/dummy-app-without-app-context-menu'); }); - it('Should render a home button', () => { - expect(currentApp.homeButton.isPresent).to.equal(true); - }); + it('Should render a home button', () => homeButton.exists()); it('Should have an aria-label equal to: "Current open application: {displayName} (Click to go home)"', () => { - expect(currentApp.homeButton.ariaLabel).to.equal('Current open application: Dummy app without context menu (Click to go home)'); + return homeButton.has({ ariaLabel: 'Current open application: Dummy app without context menu (Click to go home)' }); }); }); describe('When on the initial route (no active app)', () => { - it('Should render a heading with a label of "FOLIO"', () => { - expect(currentApp.homeButton.isPresent).to.equal(true); - expect(currentApp.homeButton.label).to.equal('FOLIO'); - }); + it('Should render a heading with a label of "FOLIO"', () => HomeButton('FOLIO').exists()); }); }); diff --git a/test/bigtest/tests/PasswordValidationField-test.js b/test/bigtest/tests/PasswordValidationField-test.js index 8932a6ba1..0b169f654 100644 --- a/test/bigtest/tests/PasswordValidationField-test.js +++ b/test/bigtest/tests/PasswordValidationField-test.js @@ -4,7 +4,7 @@ import { describe, beforeEach, it, -} from '@bigtest/mocha'; +} from 'mocha'; import { expect } from 'chai'; import TextFieldInteractor from '@folio/stripes-components/lib/TextField/tests/interactor'; diff --git a/test/bigtest/tests/about-test.js b/test/bigtest/tests/about-test.js index d791eb428..e8be5a7ac 100644 --- a/test/bigtest/tests/about-test.js +++ b/test/bigtest/tests/about-test.js @@ -1,8 +1,7 @@ -import { describe, beforeEach, it } from '@bigtest/mocha'; -import { expect } from 'chai'; +import { describe, beforeEach, it } from 'mocha'; import React, { Component } from 'react'; - +import { converge } from '@folio/stripes-testing'; import setupApplication from '../helpers/setup-core-application'; import AboutInteractor from '../interactors/about'; @@ -34,8 +33,8 @@ describe('About', () => { this.visit('/settings/about'); }); - it('has one installed app', function () { - expect(about.installedApps()).to.have.lengthOf(1); - }); + it('has one installed app', () => converge(() => { + if (!(about.installedApps().length === 1)) throw new Error(`expected ${about.installedApps().length} to be 1`); + })); }); }); diff --git a/test/bigtest/tests/callout-context-test.js b/test/bigtest/tests/callout-context-test.js index 07fe23005..159f0e6be 100644 --- a/test/bigtest/tests/callout-context-test.js +++ b/test/bigtest/tests/callout-context-test.js @@ -1,6 +1,6 @@ import React, { Component, useContext } from 'react'; -import { describe, beforeEach, it } from '@bigtest/mocha'; +import { describe, beforeEach, it } from 'mocha'; import { expect } from 'chai'; diff --git a/test/bigtest/tests/createResetPassword-test.js b/test/bigtest/tests/createResetPassword-test.js index 5214bf0c4..333b2abba 100644 --- a/test/bigtest/tests/createResetPassword-test.js +++ b/test/bigtest/tests/createResetPassword-test.js @@ -1,21 +1,69 @@ -import { expect } from 'chai'; - import { describe, it, beforeEach, -} from '@bigtest/mocha'; +} from 'mocha'; + +import { + TextField, + HTML, + Button, +} from '@folio/stripes-testing'; import setupApplication from '../helpers/setup-core-application'; -import CreateResetPasswordInteractor from '../interactors/CreateResetPassword'; -import ChangePasswordErrorPageInteractor from '../interactors/ChangePasswordErrorPage'; -import ChangePasswordConfirmationInteractor from '../interactors/ChangePasswordConfirmation'; -import LoginInteractor from '../interactors/login'; +import always from '../helpers/always'; +import { Login as LoginInteractor } from '../interactors/common'; import translations from '../../../translations/stripes-core/en'; +const labelInteractor = HTML.extend('label') + .selector('label') + .filters({ + for: el => el.htmlFor + }); + +const CreateResetPasswordInteractor = HTML.extend('create/reset password form') + .selector('form[class^="form--"]') + .filters({ + error: el => el.querySelector('[data-test-message-banner]') !== null, + errorText: el => el.querySelector('[data-test-message-banner]')?.innerText || '', + newPasswordLabel: el => el.querySelectorAll('label')[0].textContent, + newPasswordValue: el => el.querySelector('#new-password').value, + newPasswordType: el => el.querySelector('#new-password').type, + confirmPasswordLabel: el => el.querySelectorAll('label')[1].textContent, + confirmPasswordValue: el => el.querySelector('#confirm-password').value, + confirmPasswordType: el => el.querySelector('#confirm-password').type, + }) + .actions({ + async fillIn({ find }, values) { + await find(TextField({ id: 'new-password' })).fillIn(values.newPassword); + await find(TextField({ id: 'confirm-password' })).fillIn(values.confirmPassword); + }, + clickShowPassword: ({ find }) => find(Button(translations['button.showPassword'])).click(), + clickHidePassword: ({ find }) => find(Button(translations['button.hidePassword'])).click(), + clickSubmit: ({ find }) => find(Button({ text: translations.setPassword, disabled: false })).click(), + }); + +const ChangePasswordErrorInteractor = HTML.extend('change password confirmation') + .selector('[data-test-change-password-error]') + .filters({ + errorText: el => el.querySelector('[data-test-message]').innerText, + }); + +const ChangePasswordConfirmationInteractor = HTML.extend('change password confirmation') + .selector('[data-test-change-password-confirmation]') + .filters({ + heading: (el) => el.querySelector('h1').innerText, + errorText: el => el.querySelector('[data-test-message]').innerText, + }) + .actions({ + clickContinue: ({ find }) => find(Button('Continue to FOLIO')).click() + }); + describe('Create/Reset password page', () => { - const CreateResetPasswordPage = new CreateResetPasswordInteractor('form[class^="form--"]'); + const CreateResetPasswordPage = CreateResetPasswordInteractor(); + const newPasswordField = TextField({ type: 'password', id: 'new-password' }); + const confirmPasswordField = TextField({ type: 'password', id: 'confirm-password' }); setupApplication({ disableAuth: false, @@ -26,309 +74,115 @@ describe('Create/Reset password page', () => { beforeEach(function () { return this.visit({ pathname: '/reset-password/test', - }, () => { - expect(CreateResetPasswordPage.isPresent).to.be.true; - }); + }, () => CreateResetPasswordPage.exists()); }); describe('default behavior', () => { describe('new password field', () => { - it('should be presented', () => { - expect(CreateResetPasswordPage.newPassword.isPresent).to.be.true; - }); - - it('should have type password', () => { - expect(CreateResetPasswordPage.newPassword.type).to.equal('password'); - }); + it('should have a [type=password] field for new password', () => CreateResetPasswordPage.has({ newPasswordType: 'password' })); - it('should have proper label', () => { - expect(CreateResetPasswordPage.newPassword.label).to.equal(translations['createResetPassword.newPassword']); - }); + it('should contain a proper label for the new password field', () => labelInteractor({ text: translations['createResetPassword.newPassword'], for: 'new-password' })); }); describe('confirm password field', () => { - it('should be presented', () => { - expect(CreateResetPasswordPage.confirmPassword.isPresent).to.be.true; - }); + it('should have a [type=password] field for confirm password', () => CreateResetPasswordPage.has({ confirmPasswordType: 'password' })); - it('should have type password', () => { - expect(CreateResetPasswordPage.confirmPassword.type).to.equal('password'); - }); - - it('should have proper label', () => { - expect(CreateResetPasswordPage.confirmPassword.label).to.equal(translations['createResetPassword.confirmPassword']); - }); + it('should contain a proper label for the confirm password field', () => labelInteractor({ text: translations['createResetPassword.confirmPassword'], for: 'confirm-password' })); }); describe('toggle mask button', () => { - it('should be presented', () => { - expect(CreateResetPasswordPage.toggleMask.isPresent).to.be.true; - }); - - it('should have proper text', () => { - expect(CreateResetPasswordPage.toggleMask.text).to.equal(translations['button.showPassword']); - }); + it('should be presented', () => Button(translations['button.showPassword']).exists()); }); describe('submit button', () => { - it('should be presented', () => { - expect(CreateResetPasswordPage.submit.isPresent).to.be.true; - }); - - it('should have proper text', () => { - expect(CreateResetPasswordPage.submit.text).to.equal(translations.setPassword); - }); - - it('should be disabled', () => { - expect(CreateResetPasswordPage.submit.isDisabled).to.be.true; - }); + it('should be present', () => Button({ text: translations.setPassword, disabled: true }).exists()); describe('error message', () => { - it.always('should not be presented', () => { - expect(CreateResetPasswordPage.message.isPresent).to.be.false; - }); + it('should not be presented', always(() => CreateResetPasswordPage.has({ error: false }))); }); }); describe('same passwords insertion', () => { - beforeEach(async function () { - const { newPassword, confirmPassword } = CreateResetPasswordPage; - - await newPassword.fillAndBlur('test'); - await confirmPassword.fillAndBlur('test'); + beforeEach(async () => { + await CreateResetPasswordPage.fillIn({ newPassword: 'test', confirmPassword: 'test' }); }); describe('new password field', () => { - it.always('should be presented', () => { - expect(CreateResetPasswordPage.newPassword.isPresent).to.be.true; - }); + it('should be presented', always(() => newPasswordField.exists())); - it.always('should have type password', () => { - expect(CreateResetPasswordPage.newPassword.type).to.equal('password'); - }); - - it.always('should have proper label', () => { - expect(CreateResetPasswordPage.newPassword.label).to.equal(translations['createResetPassword.newPassword']); - }); + it('should have proper label', always(() => CreateResetPasswordPage.has({ newPasswordLabel: translations['createResetPassword.newPassword'] }))); - it('should have inserted password', () => { - expect(CreateResetPasswordPage.newPassword.val).to.equal('test'); - }); + it('should have inserted password', () => CreateResetPasswordPage.has({ newPasswordValue: 'test' })); }); describe('confirm password field', () => { - it.always('should be presented', () => { - expect(CreateResetPasswordPage.confirmPassword.isPresent).to.be.true; - }); + it('should be presented', always(() => confirmPasswordField.exists())); - it.always('should have type password', () => { - expect(CreateResetPasswordPage.confirmPassword.type).to.equal('password'); - }); - - it.always('should have proper label', () => { - expect(CreateResetPasswordPage.confirmPassword.label).to.equal(translations['createResetPassword.confirmPassword']); - }); + it('should have proper label', always(() => CreateResetPasswordPage.has({ confirmPasswordLabel: translations['createResetPassword.newPassword'] }))); - it('should have inserted password', () => { - expect(CreateResetPasswordPage.confirmPassword.val).to.equal('test'); - }); + it('should have inserted password', () => CreateResetPasswordPage.has({ confirmPasswordValue: 'test' })); }); describe('toggle mask button', () => { - it.always('should be presented', () => { - expect(CreateResetPasswordPage.toggleMask.isPresent).to.be.true; - }); - - it.always('should have proper text', () => { - expect(CreateResetPasswordPage.toggleMask.text).to.equal(translations['button.showPassword']); - }); - describe('toggle mask from password to text', () => { beforeEach(async () => { - await CreateResetPasswordPage.toggleMask.toggleMaskButton(); + await CreateResetPasswordPage.clickShowPassword(); }); - it('checks toggled button text', () => { - expect(CreateResetPasswordPage.toggleMask.text).to.equal(translations['button.hidePassword']); - }); + it('checks toggled button text', () => Button(translations['button.hidePassword']).exists()); - it('changes the type of the confirm password field to text', () => { - expect(CreateResetPasswordPage.confirmPassword.type).to.equal('text'); - }); + it('changes the type of the confirm password field to text', () => CreateResetPasswordPage.has({ confirmPasswordType: 'text' })); - it('changes the type of the new password field to text', () => { - expect(CreateResetPasswordPage.newPassword.type).to.equal('text'); - }); + it('changes the type of the new password field to text', () => CreateResetPasswordPage.has({ newPasswordType: 'text' })); describe('toggle mask from text to password', () => { beforeEach(async () => { - await CreateResetPasswordPage.toggleMask.toggleMaskButton(); + await CreateResetPasswordPage.clickHidePassword(); }); - it('checks toggled button text', () => { - expect(CreateResetPasswordPage.toggleMask.text).to.equal(translations['button.showPassword']); - }); + it('checks toggled button text', () => Button(translations['button.showPassword']).exists()); - it('changes the type of the confirm password field to text', () => { - expect(CreateResetPasswordPage.confirmPassword.type).to.equal('password'); - }); + it('changes the type of the confirm password field to text', () => CreateResetPasswordPage.has({ confirmPasswordType: 'password' })); - it('changes the type of the new password field to text', () => { - expect(CreateResetPasswordPage.newPassword.type).to.equal('password'); - }); + it('changes the type of the new password field to text', () => CreateResetPasswordPage.has({ confirmPasswordType: 'password' })); }); }); }); describe('submit button', () => { - it.always('should be presented', () => { - expect(CreateResetPasswordPage.submit.isPresent).to.be.true; - }); - - it.always('should have proper text', () => { - expect(CreateResetPasswordPage.submit.text).to.equal(translations.setPassword); - }); - - it.always('should be active', () => { - expect(CreateResetPasswordPage.submit.isDisabled).to.be.false; - }); + it('should be active', always(() => Button({ text: translations.setPassword, disabled: false }))); describe('error message', () => { - it.always('should not be presented', () => { - expect(CreateResetPasswordPage.message.isPresent).to.be.false; - }); + it('should not be presented', always(() => CreateResetPasswordPage.has({ error: false }))); }); }); }); describe('different passwords insertion', () => { - beforeEach(async function () { - const { newPassword, confirmPassword } = CreateResetPasswordPage; - - await newPassword.fillAndBlur('test-test'); - await confirmPassword.fillAndBlur('test'); + beforeEach(async () => { + await CreateResetPasswordPage.fillIn({ newPassword: 'test-test', confirmPassword: 'test' }); }); describe('new password field', () => { - it.always('should be presented', () => { - expect(CreateResetPasswordPage.newPassword.isPresent).to.be.true; - }); - - it.always('should have type password', () => { - expect(CreateResetPasswordPage.newPassword.type).to.equal('password'); - }); - - it.always('should have proper label', () => { - expect(CreateResetPasswordPage.newPassword.label).to.equal(translations['createResetPassword.newPassword']); - }); - - it('should have inserted password', () => { - expect(CreateResetPasswordPage.newPassword.val).to.equal('test-test'); - }); + it('should have inserted password', () => CreateResetPasswordPage.has({ newPasswordValue: 'test-test' })); }); describe('confirm password field', () => { - it.always('should be presented', () => { - expect(CreateResetPasswordPage.confirmPassword.isPresent).to.be.true; - }); - - it.always('should have type password', () => { - expect(CreateResetPasswordPage.confirmPassword.type).to.equal('password'); - }); - - it.always('should have proper label', () => { - expect(CreateResetPasswordPage.confirmPassword.label).to.equal(translations['createResetPassword.confirmPassword']); - }); - - it('should have inserted password', () => { - expect(CreateResetPasswordPage.confirmPassword.val).to.equal('test'); - }); - }); - - describe('toggle mask button', () => { - it.always('should be presented', () => { - expect(CreateResetPasswordPage.toggleMask.isPresent).to.be.true; - }); - - it.always('should have proper text', () => { - expect(CreateResetPasswordPage.toggleMask.text).to.equal(translations['button.showPassword']); - }); - - describe('toggle mask from password to text', () => { - beforeEach(async () => { - await CreateResetPasswordPage.toggleMask.toggleMaskButton(); - }); - - it('checks toggled button text', () => { - expect(CreateResetPasswordPage.toggleMask.text).to.equal(translations['button.hidePassword']); - }); - - it('changes the type of the form fields to text', () => { - expect(CreateResetPasswordPage.confirmPassword.type).to.equal('text'); - }); - - it('changes the type of the form fields to text', () => { - expect(CreateResetPasswordPage.newPassword.type).to.equal('text'); - }); - - describe('toggle mask from text to password', () => { - beforeEach(async () => { - await CreateResetPasswordPage.toggleMask.toggleMaskButton(); - }); - - it('checks toggled button text', () => { - expect(CreateResetPasswordPage.toggleMask.text).to.equal(translations['button.showPassword']); - }); - - it('changes the type of the form fields to text', () => { - expect(CreateResetPasswordPage.confirmPassword.type).to.equal('password'); - }); - - it('changes the type of the form fields to text', () => { - expect(CreateResetPasswordPage.newPassword.type).to.equal('password'); - }); - }); - }); + it('should have inserted password', () => CreateResetPasswordPage.has({ confirmPasswordValue: 'test' })); }); describe('submit button', () => { - it.always('should be presented', () => { - expect(CreateResetPasswordPage.submit.isPresent).to.be.true; - }); - - it.always('should have proper text', () => { - expect(CreateResetPasswordPage.submit.text).to.equal(translations.setPassword); - }); - - it('should be disabled', () => { - expect(CreateResetPasswordPage.submit.isDisabled).to.be.true; - }); + it('should be disabled', always(() => Button({ text: translations.setPassword, disabled: true }).exists())); describe('error message', () => { - it('should be presented', () => { - expect(CreateResetPasswordPage.message.isPresent).to.be.true; - }); - - it('should have proper text', () => { - expect(CreateResetPasswordPage.message.text).to.equal(translations['errors.password.match.error']); - }); + it('should present error message', () => CreateResetPasswordPage.has({ error: true })); }); }); }); }); describe('successful submission', () => { - const ChangePasswordConfirmation = new ChangePasswordConfirmationInteractor(); - const { - newPassword, - confirmPassword, - submitForm, - } = CreateResetPasswordPage; - const { - heading, - message, - redirect, - } = ChangePasswordConfirmation; + const confirmation = new ChangePasswordConfirmationInteractor(); setupApplication({ disableAuth: false, @@ -340,60 +194,29 @@ describe('Create/Reset password page', () => { beforeEach(async function () { await this.visit('/reset-password/test'); - await newPassword.fillAndBlur('test'); - await confirmPassword.fillAndBlur('test'); - await submitForm.clickSubmit(); - }); - - it('should display change password confirmation', () => { - expect(ChangePasswordConfirmation.isPresent).to.be.true; - }); - - it('should display a heading', () => { - expect(heading.isPresent).to.be.true; - }); - - it('should have an appropriate content', () => { - expect(heading.text).to.equal(translations['label.congratulations']); + await CreateResetPasswordPage.fillIn({ newPassword: 'test', confirmPassword: 'test' }); + await CreateResetPasswordPage.clickSubmit(); }); - it('should display a message', () => { - expect(message.isPresent).to.be.true; - }); + it('should display change password confirmation', () => confirmation.exists()); - it('should have an appropriate content', () => { - expect(message.text).to.equal(translations['label.changed.password']); - }); + it('should display the proper heading', () => confirmation.has({ heading: translations['label.congratulations'] })); - it('should display a button', () => { - expect(redirect.isPresent).to.be.true; - }); + it('should have an appropriate content', () => confirmation.has({ errorText: translations['label.changed.password'] })); describe('successful submission: redirect', () => { beforeEach(async function () { - await redirect.clickContinue(); + await confirmation.clickContinue(); }); - const login = new LoginInteractor('form[class^="form--"]'); - - it('should not display a passwordChanged view', () => { - expect(ChangePasswordConfirmation.isPresent).to.be.false; - }); + it('should not display a passwordChanged view', () => confirmation.absent()); - it('should display a login page', () => { - expect(login.isPresent).to.be.true; - }); + it('should display a login page', () => LoginInteractor(translations['title.login']).exists()); }); }); describe('non-successful submission: expired link', () => { - const ChangePasswordConfirmation = new ChangePasswordConfirmationInteractor(); - const { - newPassword, - confirmPassword, - submitForm, - message, - } = CreateResetPasswordPage; + const confirmation = new ChangePasswordConfirmationInteractor(); setupApplication({ disableAuth: false, @@ -404,36 +227,17 @@ describe('Create/Reset password page', () => { beforeEach(async function () { await this.visit('/reset-password/test'); - await newPassword.fillAndBlur('test'); - await confirmPassword.fillAndBlur('test'); - await submitForm.clickSubmit(); - }); - - it('should not display change password confirmation', () => { - expect(ChangePasswordConfirmation.isPresent).to.be.false; - }); - - it('should display CreateResetPassword page', () => { - expect(CreateResetPasswordPage.isPresent).to.be.true; + await CreateResetPasswordPage.fillIn({ newPassword: 'test', confirmPassword: 'test' }); + await CreateResetPasswordPage.clickSubmit(); }); - it('should present an error message', () => { - expect(message.isPresent).to.be.true; - }); + it('should not display change password confirmation', () => confirmation.absent()); - it('should have an appropriate text content', () => { - expect(message.text).to.equal(translations['errors.link.expired']); - }); + it('should have an appropriate text content', () => CreateResetPasswordPage.has({ errorText: translations['errors.link.expired'] })); }); describe('non-successful submission: invalid link', () => { - const ChangePasswordConfirmation = new ChangePasswordConfirmationInteractor(); - const { - newPassword, - confirmPassword, - submitForm, - message, - } = CreateResetPasswordPage; + const confirmation = ChangePasswordConfirmationInteractor(); setupApplication({ disableAuth: false, @@ -445,36 +249,17 @@ describe('Create/Reset password page', () => { beforeEach(async function () { this.visit('/reset-password/test'); - await newPassword.fillAndBlur('test'); - await confirmPassword.fillAndBlur('test'); - await submitForm.clickSubmit(); - }); - - it('should not display change password confirmation', () => { - expect(ChangePasswordConfirmation.isPresent).to.be.false; - }); - - it('should display CreateResetPassword page', () => { - expect(CreateResetPasswordPage.isPresent).to.be.true; + await CreateResetPasswordPage.fillIn({ newPassword: 'test', confirmPassword: 'test' }); + await CreateResetPasswordPage.clickSubmit(); }); - it('should present an error message', () => { - expect(message.isPresent).to.be.true; - }); + it('should not display change password confirmation', () => confirmation.absent()); - it('should have an appropriate text content', () => { - expect(message.text).to.equal(translations['errors.link.invalid']); - }); + it('should present an error message', () => CreateResetPasswordPage.has({ errorText: translations['errors.link.invalid'] })); }); describe('non-successful submission: client error', () => { - const ChangePasswordConfirmation = new ChangePasswordConfirmationInteractor(); - const { - newPassword, - confirmPassword, - submitForm, - message, - } = CreateResetPasswordPage; + const confirmation = ChangePasswordConfirmationInteractor(); setupApplication({ disableAuth: false, @@ -483,32 +268,18 @@ describe('Create/Reset password page', () => { beforeEach(async function () { this.visit('/reset-password/test'); - await newPassword.fillAndBlur('test'); - await confirmPassword.fillAndBlur('test'); - await submitForm.clickSubmit(); - }); - - it('should not display change password confirmation', () => { - expect(ChangePasswordConfirmation.isPresent).to.be.false; + await CreateResetPasswordPage.fillIn({ newPassword: 'test', confirmPassword: 'test' }); + await CreateResetPasswordPage.clickSubmit(); }); - it('should display CreateResetPassword page', () => { - expect(CreateResetPasswordPage.isPresent).to.be.true; - }); - - it('should present an error message', () => { - expect(message.isPresent).to.be.true; - }); + it('should not display change password confirmation', () => confirmation.absent()); - it('should have an appropriate text content', () => { - expect(message.text).to.equal(translations['errors.link.invalid']); - }); + it('should have an appropriate text content', () => CreateResetPasswordPage.has({ errorText: translations['errors.link.invalid'] })); }); }); describe('invalid token scenario', () => { - const ChangePasswordErrorPage = new ChangePasswordErrorPageInteractor(); - const { message } = ChangePasswordErrorPage; + const errorPage = ChangePasswordErrorInteractor(); describe('invalid token: default', () => { setupApplication({ @@ -521,18 +292,10 @@ describe('Create/Reset password page', () => { beforeEach(function () { return this.visit({ pathname: '/reset-password/test' - }, () => { - expect(ChangePasswordErrorPage.isPresent).to.be.true; - }); + }, () => errorPage.exists()); }); - it('should display an error message', () => { - expect(message.isPresent).to.be.true; - }); - - it('should have an appropriate content', () => { - expect(message.text).to.equal(translations['errors.link.invalid']); - }); + it('should have an appropriate content', () => errorPage.has({ errorText: translations['errors.link.invalid'] })); }); describe('invalid token', () => { @@ -546,18 +309,10 @@ describe('Create/Reset password page', () => { beforeEach(function () { return this.visit({ pathname: '/reset-password/test/' - }, () => { - expect(ChangePasswordErrorPage.isPresent).to.be.true; - }); - }); - - it('should display an error message', () => { - expect(message.isPresent).to.be.true; + }, () => errorPage.exists()); }); - it('should have an appropriate content', () => { - expect(message.text).to.equal(translations['errors.link.invalid']); - }); + it('should have an appropriate content', () => errorPage.has({ errorText: translations['errors.link.invalid'] })); }); describe('expired token', () => { @@ -571,18 +326,10 @@ describe('Create/Reset password page', () => { beforeEach(function () { return this.visit({ pathname: '/reset-password/test/' - }, () => { - expect(ChangePasswordErrorPage.isPresent).to.be.true; - }); - }); - - it('should display an error message', () => { - expect(message.isPresent).to.be.true; + }, () => errorPage.exists()); }); - it('should have an appropriate content', () => { - expect(message.text).to.equal(translations['errors.link.expired']); - }); + it('should have an appropriate content', () => errorPage.has({ errorText: translations['errors.link.expired'] })); }); describe('used token', () => { @@ -596,18 +343,10 @@ describe('Create/Reset password page', () => { beforeEach(function () { return this.visit({ pathname: '/reset-password/test/' - }, () => { - expect(ChangePasswordErrorPage.isPresent).to.be.true; - }); + }, () => errorPage.exists()); }); - it('should display an error message', () => { - expect(message.isPresent).to.be.true; - }); - - it('should have an appropriate content', () => { - expect(message.text).to.equal(translations['errors.link.used']); - }); + it('should have an appropriate content', () => errorPage.has({ errorText: translations['errors.link.used'] })); }); describe('system error', () => { setupApplication({ @@ -620,18 +359,10 @@ describe('Create/Reset password page', () => { beforeEach(function () { return this.visit({ pathname: '/reset-password/test/' - }, () => { - expect(ChangePasswordErrorPage.isPresent).to.be.true; - }); - }); - - it('should display an error message', () => { - expect(message.isPresent).to.be.true; + }, () => errorPage.exists()); }); - it('should have an appropriate content', () => { - expect(message.text).to.equal(translations['errors.default.server.error']); - }); + it('should have an appropriate content', () => errorPage.has({ errorText: translations['errors.default.server.error'] })); }); }); }); diff --git a/test/bigtest/tests/forgotPassword-test.js b/test/bigtest/tests/forgotPassword-test.js index d2600054f..fe26e770d 100644 --- a/test/bigtest/tests/forgotPassword-test.js +++ b/test/bigtest/tests/forgotPassword-test.js @@ -2,12 +2,42 @@ import { describe, it, beforeEach, -} from '@bigtest/mocha'; -import { expect } from 'chai'; +} from 'mocha'; + +import { + TextField, + Button, + HTML, + MessageBanner, +} from '@folio/stripes-testing'; import translations from '../../../translations/stripes-core/en'; import setupApplication from '../helpers/setup-core-application'; -import ForgotPasswordInteractor from '../interactors/ForgotPassword'; +import always from '../helpers/always'; +import { StatusPage as StatusPageInteractor } from '../interactors/common'; + +const ForgotPasswordInteractor = HTML.extend('forgot password') + .selector('form[class^="form--"]') + .filters({ + headingText: el => el.querySelector('[data-test-h1]')?.textContent || '', + submitDisabled: el => el.querySelector('button[disabled]') !== null, + callToActionText: el => el.querySelector('[data-test-p]')?.text || '', + }) + .actions({ + fillIn : async ({ find }, value) => { + await find(TextField()).fillIn(value); + }, + clickSubmit: async ({ find }) => { + await find(Button({ type: 'submit' })).click(); + }, + fillAndSubmit: async ({ find }, value) => { + await find(TextField()).fillIn(value); + await find(Button({ type: 'submit' })).click(); + } + }); + +const ErrorsContainerInteractor = MessageBanner.extend('errors container') + .selector('[data-test-errors]'); describe('forgot password form test', () => { setupApplication({ disableAuth: false }); @@ -16,87 +46,40 @@ describe('forgot password form test', () => { this.visit('/forgot-password'); }); - const forgotPasswordPage = new ForgotPasswordInteractor(); - const { - inputField, - submitButton, - mainHeading, - callToActionParagraph, - errorsWrapper, - errorsWrapper: { errorsContainer }, - statusPage, - statusPage: { - heading: statusPageHeading, - notificationParagraph, - cautionParagraph, - }, - } = forgotPasswordPage; + const forgotPasswordPage = ForgotPasswordInteractor(); const nonExistingRecord = '12345'; const existingRecord = '127-699-8925'; describe('forgot form text input field tests', () => { - it('should display a field to enter the email or phone number', () => { - expect(inputField.isPresent).to.be.true; - }); + it('should display a field to enter the email or phone number', () => TextField().exists()); - it('should have an empty value', () => { - expect(inputField.val).to.equal(''); - }); + it('should have an empty value', () => TextField().has({ value: '' })); }); describe('forgot form submit button tests', () => { - it('should display a "Continue" button to submit a request', () => { - expect(submitButton.isPresent).to.be.true; - }); - - it('should have a disabled "Continue" button by default', () => { - expect(submitButton.isDisabled).to.be.true; - }); + it('should display a disabled "Continue" button to submit a request', () => Button({ type: 'submit', disabled: true }).exists()); }); describe('forgot form submit button test after filling the input', () => { beforeEach(async () => { - await inputField.fillInput(existingRecord); + await forgotPasswordPage.fillIn(existingRecord); }); - it.always('should have an enabled submit button', () => { - expect(submitButton.isDisabled).to.be.false; - }); + it('should have an enabled submit button', always(() => forgotPasswordPage.has({ submitDisabled: false }))); }); describe('forgot form headings tests', () => { - it('should display the heading', () => { - expect(mainHeading.isPresent).to.be.true; - }); - - it('should have the main heading content equal to forgot username label', () => { - expect(mainHeading.text).to.equal(translations['label.forgotPassword']); - }); - - it('should display the paragraph', () => { - expect(callToActionParagraph.isPresent).to.be.true; - }); - - it('should have the paragraph content equal to forgot username or password call to action label', () => { - expect(callToActionParagraph.text).to.equal( - translations['label.forgotPasswordCallToAction'] - ); - }); + it('should display the heading equal to forgot username or password call to action label', () => forgotPasswordPage.has({ headingText: translations['label.forgotPassword'] })); }); describe('error container initial behaviour', () => { describe('forgot form error container integration test', () => { - it('should display the error container wrapper', () => { - expect(errorsWrapper.isPresent).to.be.true; - }); - - it.always('should not display the error container', () => { - expect(errorsContainer.isPresent).to.be.false; - }); + it('should not display the error container', always(() => ErrorsContainerInteractor({ visible: false }).exists())); }); }); describe('forgot form submission behaviour tests', () => { + const errorsContainer = ErrorsContainerInteractor(); describe('forgot form submission failed: no account found', () => { setupApplication({ disableAuth: false, @@ -105,19 +88,12 @@ describe('forgot password form test', () => { beforeEach(async function () { this.visit('/forgot-password'); - await inputField.fillInput(nonExistingRecord); - await submitButton.click(); + await forgotPasswordPage.fillAndSubmit(nonExistingRecord); }); - it('should display an error container if the input does not match any record', () => { - expect(errorsContainer.isPresent).to.be.true; - }); + it('should display an error container if the input does not match any record', () => errorsContainer.exists()); - it('should should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.unable.locate.account'] - ); - }); + it('should should have an appropriate error text content', () => errorsContainer.has({ text: translations['errors.unable.locate.account'] })); }); describe('forgot form submission failed: no account found - default', () => { @@ -128,19 +104,12 @@ describe('forgot password form test', () => { beforeEach(async function () { this.visit('/forgot-password'); - await inputField.fillInput(nonExistingRecord); - await submitButton.click(); + await forgotPasswordPage.fillAndSubmit(nonExistingRecord); }); - it('should display an error container if the input does not match any record', () => { - expect(errorsContainer.isPresent).to.be.true; - }); + it('should display an error container if the input does not match any record', () => errorsContainer.exists()); - it('should should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.unable.locate.account.password'] - ); - }); + it('should should have an appropriate error text content', () => errorsContainer.has({ text: translations['errors.unable.locate.account.password'] })); }); describe('forgot form submission failed: multiple accounts found', () => { @@ -151,19 +120,12 @@ describe('forgot password form test', () => { beforeEach(async function () { this.visit('/forgot-password'); - await inputField.fillInput(nonExistingRecord); - await submitButton.click(); + await forgotPasswordPage.fillAndSubmit(nonExistingRecord); }); - it('should display an error container if the input matches many accounts', () => { - expect(errorsContainer.isPresent).to.be.true; - }); + it('should display an error container if the input matches many accounts', () => errorsContainer.exists()); - it('should should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.forgotten.password.found.multiple.users'] - ); - }); + it('should should have an appropriate error text content', () => errorsContainer.has({ text: translations['errors.forgotten.password.found.multiple.users'] })); }); describe('forgot form submission failed: server error', () => { @@ -174,19 +136,12 @@ describe('forgot password form test', () => { beforeEach(async function () { this.visit('/forgot-password'); - await inputField.fillInput(nonExistingRecord); - await submitButton.click(); + await forgotPasswordPage.fillAndSubmit(nonExistingRecord); }); - it('should display an error container if server error occurred', () => { - expect(errorsContainer.isPresent).to.be.true; - }); + it('should display an error container if server error occurred', () => errorsContainer.exists()); - it('should should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.default.server.error'] - ); - }); + it('should should have an appropriate error text content', () => errorsContainer.has({ text: translations['errors.default.server.error'] })); }); describe('forgot form submission failed: account locked', () => { @@ -197,22 +152,16 @@ describe('forgot password form test', () => { beforeEach(async function () { this.visit('/forgot-password'); - await inputField.fillInput(nonExistingRecord); - await submitButton.click(); + await forgotPasswordPage.fillAndSubmit(nonExistingRecord); }); - it('should display an error container if server error occurred', () => { - expect(errorsContainer.isPresent).to.be.true; - }); + it('should display an error container if server error occurred', () => errorsContainer.exists()); - it('should should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.forgotten.password.found.inactive'] - ); - }); + it('should should have an appropriate error text content', () => errorsContainer.has({ text: translations['errors.forgotten.password.found.inactive'] })); }); describe('Forgot form successful submission behaviour', () => { + const statusPage = StatusPageInteractor(); setupApplication({ disableAuth: false, scenarios: ['forgotPasswordSuccess'], @@ -220,47 +169,18 @@ describe('forgot password form test', () => { beforeEach(async function () { this.visit('/forgot-password'); - await inputField.fillInput(existingRecord); - await submitButton.click(); + await forgotPasswordPage.fillAndSubmit(existingRecord); }); - it.always('should not display an error container if the input match any record in DB', () => { - expect(errorsContainer.isPresent).to.be.false; - }); - - it('should be redirected to the Check email status page', () => { - expect(statusPage.isPresent).to.be.true; - }); + it('should not display an error container if the input match any record in DB', always(() => ErrorsContainerInteractor({ visible: false }).exists())); - it('should display a header', () => { - expect(statusPageHeading.isPresent).to.be.true; - }); + it('should be redirected to the Check email status page', () => statusPage.exists()); - it('should have the header with an appropriate text content equal to check email label', () => { - expect(statusPageHeading.text).to.equal( - translations['label.check.email'] - ); - }); + it('should display a header', () => statusPage.has({ headingText: translations['label.check.email'] })); - it('should display a paragraph with notification', () => { - expect(notificationParagraph.isPresent).to.be.true; - }); + it('should have the paragraph with an appropriate text content equal to sent email precautions label', () => statusPage.has({ notificationText: translations['label.your.email'] })); - it('should have the paragraph with an appropriate text content equal to sent email precautions label', () => { - expect(notificationParagraph.text).to.equal( - translations['label.your.email'] - ); - }); - - it('should display a paragraph with precautions', () => { - expect(cautionParagraph.isPresent).to.be.true; - }); - - it('should have the paragraph with an appropriate text content equal to check email precautions label', () => { - expect(cautionParagraph.text).to.equal( - translations['label.caution.email'] - ); - }); + it('should have the paragraph with an appropriate text content equal to check email precautions label', () => statusPage.has({ cautionText: translations['label.caution.email'] })); }); }); }); diff --git a/test/bigtest/tests/forgotUsername-test.js b/test/bigtest/tests/forgotUsername-test.js index 85c2081c7..0216e369f 100644 --- a/test/bigtest/tests/forgotUsername-test.js +++ b/test/bigtest/tests/forgotUsername-test.js @@ -2,12 +2,42 @@ import { describe, it, beforeEach, -} from '@bigtest/mocha'; -import { expect } from 'chai'; +} from 'mocha'; + +import { + TextField, + Button, + HTML, + MessageBanner, +} from '@folio/stripes-testing'; import translations from '../../../translations/stripes-core/en'; import setupApplication from '../helpers/setup-core-application'; -import ForgotUsernameInteractor from '../interactors/ForgotUsername'; +import always from '../helpers/always'; +import { StatusPage as StatusPageInteractor } from '../interactors/common'; + +const ForgotUsernameInteractor = HTML.extend('forgot username') + .selector('form[class^="form--"]') + .filters({ + headingText: el => el.querySelector('[data-test-h1]')?.textContent || '', + submitDisabled: el => el.querySelector('button[disabled]') !== null, + callToActionText: el => el.querySelector('[data-test-p]')?.textContent || '', + }) + .actions({ + fillIn : async ({ find }, value) => { + await find(TextField()).fillIn(value); + }, + clickSubmit: async ({ find }) => { + await find(Button({ type: 'submit' })).click(); + }, + fillAndSubmit: async ({ find }, value) => { + await find(TextField()).fillIn(value); + await find(Button({ type: 'submit' })).click(); + } + }); + +const ErrorsContainerInteractor = MessageBanner.extend('errors container') + .selector('[data-test-errors]'); describe('Forgot username form test', () => { setupApplication({ disableAuth: false }); @@ -16,104 +46,49 @@ describe('Forgot username form test', () => { this.visit('/forgot-username'); }); - const forgotUsernamePage = new ForgotUsernameInteractor(); - const { - inputField, - submitButton, - mainHeading, - callToActionParagraph, - errorsWrapper, - errorsWrapper: { errorsContainer }, - statusPage, - statusPage: { - heading: statusPageHeading, - notificationParagraph, - cautionParagraph, - }, - } = forgotUsernamePage; + const forgotUsernamePage = ForgotUsernameInteractor(); const invalidInput = 'asdfgh12345'; const nonExistingRecord = '12345'; const existingRecord = '127-699-8925'; describe('forgot form text input field tests', () => { - it('should display a field to enter the email or phone number', () => { - expect(inputField.isPresent).to.be.true; - }); + it('should display a field to enter the email or phone number', () => TextField().exists()); - it('should have an empty value', () => { - expect(inputField.val).to.equal(''); - }); + it('should have an empty value', () => TextField().has({ value: '' })); }); describe('forgot form submit button tests', () => { - it('should display a "Continue" button to submit a request', () => { - expect(submitButton.isPresent).to.be.true; - }); - - it('should have a disabled "Continue" button by default', () => { - expect(submitButton.isDisabled).to.be.true; - }); + it('should display a disabled "Continue" button to submit a request', () => Button({ type: 'submit', disabled: true }).exists()); }); describe('forgot form submit button test after filling the input', () => { beforeEach(async () => { - await inputField.fillInput(invalidInput); + await forgotUsernamePage.fillIn(invalidInput); }); - it.always('should have an enabled submit button', () => { - expect(submitButton.isDisabled).to.be.false; - }); + it('should have an enabled submit button', always(() => forgotUsernamePage.has({ submitDisabled: false }))); }); describe('forgot form headings tests', () => { - it('should display the heading', () => { - expect(mainHeading.isPresent).to.be.true; - }); - - it('should have the main heading content equal to forgot username label', () => { - expect(mainHeading.text).to.equal(translations['label.forgotUsername']); - }); - - it('should display the paragraph', () => { - expect(callToActionParagraph.isPresent).to.be.true; - }); + it('should have the main heading content equal to forgot username label', () => forgotUsernamePage.has({ headingText: translations['label.forgotUsername'] })); - it('should have the paragraph content equal to forgot username or password call to action label', () => { - expect(callToActionParagraph.text).to.equal( - translations['label.forgotUsernameCallToAction'] - ); - }); + it('should have the paragraph content equal to forgot username or password call to action label', () => forgotUsernamePage.has({ callToActionText: translations['label.forgotUsernameCallToAction'] })); }); describe('error container initial behaviour', () => { describe('forgot form error container integration test', () => { - it('should display the error container wrapper', () => { - expect(errorsWrapper.isPresent).to.be.true; - }); - - it.always('should not display the error container', () => { - expect(errorsContainer.isPresent).to.be.false; - }); + it('should not display the error container', always(() => ErrorsContainerInteractor({ visible: false }).exists())); }); }); describe('forgot form submission behaviour tests', () => { + const errorsContainer = ErrorsContainerInteractor(); describe('forgot form validation tests', () => { beforeEach(async () => { - await inputField.fillInput(invalidInput); - await submitButton.click(); + await forgotUsernamePage.fillAndSubmit(invalidInput); }); - it('should display an error container if the input is not a valid email', - () => { - expect(errorsContainer.isPresent).to.be.true; - }); - - it('should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.email.invalid'] - ); - }); + it('should have an appropriate error text content if the input doesn\'t contain a valid email', () => errorsContainer.has({ text: translations['errors.email.invalid'] })); }); describe('forgot form submission failed: no account found', () => { @@ -124,19 +99,10 @@ describe('Forgot username form test', () => { beforeEach(async function () { this.visit('/forgot-username'); - await inputField.fillInput(nonExistingRecord); - await submitButton.click(); + await forgotUsernamePage.fillAndSubmit(nonExistingRecord); }); - it('should display an error container if the input does not match any record', () => { - expect(errorsContainer.isPresent).to.be.true; - }); - - it('should should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.unable.locate.account'] - ); - }); + it('should should have an appropriate error text content', () => errorsContainer.has({ text: translations['errors.unable.locate.account'] })); }); describe('forgot form submission failed: no account found - default', () => { @@ -147,19 +113,10 @@ describe('Forgot username form test', () => { beforeEach(async function () { this.visit('/forgot-username'); - await inputField.fillInput(nonExistingRecord); - await submitButton.click(); + await forgotUsernamePage.fillAndSubmit(nonExistingRecord); }); - it('should display an error container if the input does not match any record', () => { - expect(errorsContainer.isPresent).to.be.true; - }); - - it('should should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.unable.locate.account'] - ); - }); + it('should should have an appropriate error text content', () => errorsContainer.has({ text: translations['errors.unable.locate.account'] })); }); describe('forgot form submission failed: multiple accounts found', () => { @@ -170,19 +127,10 @@ describe('Forgot username form test', () => { beforeEach(async function () { this.visit('/forgot-username'); - await inputField.fillInput(nonExistingRecord); - await submitButton.click(); + await forgotUsernamePage.fillAndSubmit(nonExistingRecord); }); - it('should display an error container if the input matches many accounts', () => { - expect(errorsContainer.isPresent).to.be.true; - }); - - it('should should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.forgotten.username.found.multiple.users'] - ); - }); + it('should should have an appropriate error text content', () => errorsContainer.has({ text: translations['errors.forgotten.username.found.multiple.users'] })); }); describe('forgot form submission failed: server error', () => { @@ -193,19 +141,10 @@ describe('Forgot username form test', () => { beforeEach(async function () { this.visit('/forgot-username'); - await inputField.fillInput(nonExistingRecord); - await submitButton.click(); + await forgotUsernamePage.fillAndSubmit(nonExistingRecord); }); - it('should display an error container if server error occurred', () => { - expect(errorsContainer.isPresent).to.be.true; - }); - - it('should should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.default.server.error'] - ); - }); + it('should should have an appropriate error text content', () => errorsContainer.has({ text: translations['errors.default.server.error'] })); }); describe('forgot form submission failed: account locked', () => { @@ -216,22 +155,16 @@ describe('Forgot username form test', () => { beforeEach(async function () { this.visit('/forgot-username'); - await inputField.fillInput(nonExistingRecord); - await submitButton.click(); + await forgotUsernamePage.fillAndSubmit(nonExistingRecord); }); - it('should display an error container if server error occurred', () => { - expect(errorsContainer.isPresent).to.be.true; - }); + it('should display an error container if server error occurred', () => errorsContainer.exists()); - it('should should have an appropriate error text content', () => { - expect(errorsContainer.text).to.equal( - translations['errors.forgotten.password.found.inactive'] - ); - }); + it('should should have an appropriate error text content', () => errorsContainer.has({ text: translations['errors.forgotten.password.found.inactive'] })); }); describe('forgot form successful submission behaviour', () => { + const statusPage = StatusPageInteractor(); setupApplication({ disableAuth: false, scenarios: ['forgotUsernameSuccess'], @@ -239,41 +172,16 @@ describe('Forgot username form test', () => { beforeEach(async function () { this.visit('/forgot-username'); - await inputField.fillInput(existingRecord); - await submitButton.click(); - }); - - it.always('should not display an error container if the input match any record in DB', () => { - expect(errorsContainer.isPresent).to.be.false; - }); - - it('should be redirected to the Check email status page', () => { - expect(statusPage.isPresent).to.be.true; + await forgotUsernamePage.fillAndSubmit(existingRecord); }); - it('should display a header', () => { - expect(statusPageHeading.isPresent).to.be.true; - }); - - it('should have the header with an appropriate text content equal to check email label', () => { - expect(statusPageHeading.text).to.equal( - translations['label.check.email'] - ); - }); + it('should not display an error container if the input match any record in DB', () => ErrorsContainerInteractor({ visible: false }).exists()); - it('should display a paragraph with notification', () => { - expect(notificationParagraph.isPresent).to.be.true; - }); + it('should be redirected to the Check email status page', () => statusPage.exists()); - it('should display a paragraph with precautions', () => { - expect(cautionParagraph.isPresent).to.be.true; - }); + it('should have the header with an appropriate text content equal to check email label', () => statusPage.has({ headingText: translations['label.check.email'] })); - it('should have the paragraph with an appropriate text content equal to check email precautions label', () => { - expect(cautionParagraph.text).to.equal( - translations['label.caution.email'] - ); - }); + it('should have the paragraph with an appropriate text content equal to check email precautions label', () => statusPage.has({ cautionText: translations['label.caution.email'] })); }); }); }); diff --git a/test/bigtest/tests/login-test.js b/test/bigtest/tests/login-test.js index 89e28bd88..954256dab 100644 --- a/test/bigtest/tests/login-test.js +++ b/test/bigtest/tests/login-test.js @@ -1,89 +1,65 @@ -import { expect } from 'chai'; - import { describe, it, beforeEach -} from '@bigtest/mocha'; +} from 'mocha'; +import { TextField, Bigtest, HTML, including } from '@folio/stripes-testing'; import setupApplication from '../helpers/setup-core-application'; -import LoginInteractor from '../interactors/login'; +import always from '../helpers/always'; import translations from '../../../translations/stripes-core/en'; +const ErrorMessage = HTML.extend('message banner') + .selector('[data-test-message-banner]'); + describe('Login', () => { - const login = new LoginInteractor('form[class^="form--"]'); + const { Link, Button: LoginButton } = Bigtest; + const usernamefield = TextField({ id: 'input-username' }); + const passwordfield = TextField({ id: 'input-password' }); + const loginButton = LoginButton('Log in'); + const loginDisabled = () => LoginButton({ text: 'Log in', disabled: true }).exists(); + + const loginAction = async () => { + await usernamefield.fillIn('username'); + await passwordfield.fillIn('password'); + await loginButton.click(); + }; setupApplication({ disableAuth: false }); describe('default behavior', () => { - it('should have username field', () => { - expect(login.username.isPresent).to.be.true; - }); + it('should have username field', () => usernamefield.exists()); - it('should have password field', () => { - expect(login.password.isPresent).to.be.true; - }); + it('should have password field', () => passwordfield.exists()); - it('should have forgot password link', () => { - expect(login.forgotPassword.isPresent).to.be.true; - }); + it('should have forgot password link', () => Link('Forgot password?').exists()); - it('should have forgot username link', () => { - expect(login.forgotUsername.isPresent).to.be.true; - }); + it('should have forgot username link', () => Link('Forgot username?').exists()); - it('should have submit button', () => { - expect(login.submit.isPresent).to.be.true; - }); + it('submit button should be disabled', loginDisabled); - it('submit button should be disabled', () => { - expect(login.submit.isDisabled).to.be.true; - }); - - it.always('error message should not be present', () => { - expect(login.message.isPresent).to.be.false; - }); + it('error message should not be present', always(() => ErrorMessage().absent())); }); describe('username insertion', () => { beforeEach(async () => { - const { username } = login; - - await username.fill('test'); - }); - - it('should have submit button', () => { - expect(login.submit.isPresent).to.be.true; + await usernamefield.fillIn('test'); }); - it('submit button should be active', () => { - expect(login.submit.isDisabled).to.be.false; - }); + it('submit button should be active', () => loginButton.is({ disabled: false })); - it.always('error message should not be present', () => { - expect(login.message.isPresent).to.be.false; - }); + it('error message should not be present', always(() => ErrorMessage().absent())); }); describe('password insertion', () => { beforeEach(async () => { - const password = login.password; - - await password.fill('test'); + await passwordfield.fillIn('test'); }); - it('should have submit button', () => { - expect(login.submit.isPresent).to.be.true; - }); + it('submit button should be disabled', loginDisabled); - it.always('submit button should be disabled', () => { - expect(login.submit.isDisabled).to.be.true; - }); - - it.always('error message should not be present', () => { - expect(login.message.isPresent).to.be.false; - }); + it('error message should not be present', always(() => ErrorMessage().absent())); }); describe('errors', () => { @@ -93,29 +69,13 @@ describe('Login', () => { scenarios: ['wrongUsername'], }); - beforeEach(async function () { - const { username, password, submit } = login; + beforeEach(loginAction); - await username.fill('username'); - await password.fill('password'); - await submit.click(); - }); - - it.always('username should not be reset upon failed submit', () => { - expect(login.username.value).to.equal('username'); - }); + it('username should not be reset upon failed submit', always(() => usernamefield.has({ value: 'username' }))); - it('password should be reset upon failed submit', () => { - expect(login.password.value).to.equal(''); - }); - - it('error message should be present upon failed submit', () => { - expect(login.message.isPresent).to.be.true; - }); + it('password should be reset upon failed submit', () => passwordfield.has({ value: '' })); - it('error message should have proper text upon failed submit', () => { - expect(login.message.text).to.equal(translations['errors.username.incorrect']); - }); + it('error message should have proper text upon failed submit', () => ErrorMessage(translations['errors.username.incorrect']).exists()); }); describe('error for the wrong password', () => { @@ -124,56 +84,13 @@ describe('Login', () => { scenarios: ['wrongPassword'], }); - beforeEach(async function () { - const { username, password, submit } = login; + beforeEach(loginAction); - await username.fill('username'); - await password.fill('password'); - await submit.click(); - }); + it('username should not be reset upon failed submit', always(() => usernamefield.has({ value: 'username' }))); - it.always('username should not be reset upon failed submit', () => { - expect(login.username.value).to.equal('username'); - }); + it('password should be reset upon failed submit', () => passwordfield.has({ value: '' })); - it('password should be reset upon failed submit', () => { - expect(login.password.value).to.equal(''); - }); - - it('error message should be present upon failed submit', () => { - expect(login.message.isPresent).to.be.true; - }); - - it('error message should have proper text upon failed submit', () => { - expect(login.message.text).to.equal(translations['errors.password.incorrect']); - }); - }); - - describe('error for the empty password field', () => { - setupApplication({ - disableAuth: false, - scenarios: ['emptyPasswordField'], - }); - - beforeEach(async function () { - const { username, password, submit } = login; - - await username.fill('username'); - await password.fill(''); - await submit.click(); - }); - - it.always('username should not be reset upon failed submit', () => { - expect(login.username.value).to.equal('username'); - }); - - it('should have submit button', () => { - expect(login.submit.isPresent).to.be.true; - }); - - it.always('error message should not be present', () => { - expect(login.message.isPresent).to.be.false; - }); + it('error message should have proper text upon failed submit', () => ErrorMessage(translations['errors.password.incorrect']).exists()); }); describe('error for the server error', () => { @@ -182,29 +99,13 @@ describe('Login', () => { scenarios: ['serverError'], }); - beforeEach(async function () { - const { username, password, submit } = login; + beforeEach(loginAction); - await username.fill('username'); - await password.fill('password'); - await submit.click(); - }); + it('username should not be reset upon failed submit', always(() => usernamefield.has({ value: 'username' }))); - it.always('username should not be reset upon failed submit', () => { - expect(login.username.value).to.equal('username'); - }); - - it('password should be reset upon failed submit', () => { - expect(login.password.value).to.equal(''); - }); + it('password should be reset upon failed submit', () => passwordfield.has({ value: '' })); - it('error message should be present upon failed submit', () => { - expect(login.message.isPresent).to.be.true; - }); - - it('error message should have proper text upon failed submit', () => { - expect(login.message.text).to.equal(translations['errors.default.server.error']); - }); + it('error message should have proper text upon failed submit', () => ErrorMessage(translations['errors.default.server.error']).exists()); }); describe('error for the third attempt to enter wrong password', () => { @@ -213,29 +114,13 @@ describe('Login', () => { scenarios: ['thirdAttemptToLogin'], }); - beforeEach(async function () { - const { username, password, submit } = login; + beforeEach(loginAction); - await username.fill('username'); - await password.fill('password'); - await submit.click(); - }); - - it.always('username should not be reset upon failed submit', () => { - expect(login.username.value).to.equal('username'); - }); + it('username should not be reset upon failed submit', always(() => usernamefield.has({ value: 'username' }))); - it('password should be reset upon failed submit', () => { - expect(login.password.value).to.equal(''); - }); - - it('error message should be present upon failed submit', () => { - expect(login.message.isPresent).to.be.true; - }); + it('password should be reset upon failed submit', () => passwordfield.has({ value: '' })); - it('error message should have proper text upon failed submit', () => { - expect(login.message.text).to.equal(translations['errors.password.incorrect.warn.user']); - }); + it('error message should have proper text upon failed submit', () => ErrorMessage(translations['errors.password.incorrect.warn.user']).exists()); }); describe('error for the fifth attempt to enter wrong password', () => { @@ -244,29 +129,13 @@ describe('Login', () => { scenarios: ['fifthAttemptToLogin'], }); - beforeEach(async function () { - const { username, password, submit } = login; - - await username.fill('username'); - await password.fill('password'); - await submit.click(); - }); - - it.always('username should not be reset upon failed submit', () => { - expect(login.username.value).to.equal('username'); - }); + beforeEach(loginAction); - it('password should be reset upon failed submit', () => { - expect(login.password.value).to.equal(''); - }); + it('username should not be reset upon failed submit', always(() => usernamefield.has({ value: 'username' }))); - it('error message should be present upon failed submit', () => { - expect(login.message.isPresent).to.be.true; - }); + it('password should be reset upon failed submit', () => passwordfield.has({ value: '' })); - it('error message should have proper text upon failed submit', () => { - expect(login.message.text).to.equal(translations['errors.password.incorrect.block.user']); - }); + it('error message should have proper text upon failed submit', () => ErrorMessage(translations['errors.password.incorrect.block.user'])); }); describe('error for the attempt to login to locked account', () => { @@ -275,29 +144,13 @@ describe('Login', () => { scenarios: ['lockedAccount'], }); - beforeEach(async function () { - const { username, password, submit } = login; - - await username.fill('username'); - await password.fill('password'); - await submit.click(); - }); - - it.always('username should not be reset upon failed submit', () => { - expect(login.username.value).to.equal('username'); - }); + beforeEach(loginAction); - it('password should be reset upon failed submit', () => { - expect(login.password.value).to.equal(''); - }); + it('username should not be reset upon failed submit', always(() => usernamefield.has({ value: 'username' }))); - it('error message should be present upon failed submit', () => { - expect(login.message.isPresent).to.be.true; - }); + it('password should be reset upon failed submit', () => passwordfield.has({ value: '' })); - it('error message should have proper text upon failed submit', () => { - expect(login.message.text).to.equal(translations['errors.user.blocked']); - }); + it('error message should have proper text upon failed submit', () => ErrorMessage(translations['errors.user.blocked'])); }); describe('multiple errors', () => { @@ -306,30 +159,18 @@ describe('Login', () => { scenarios: ['multipleErrors'], }); - beforeEach(async function () { - const { username, password, submit } = login; + beforeEach(loginAction); - await username.fill('username'); - await password.fill('password'); - await submit.click(); - }); + it('username should not be reset upon failed submit', always(() => usernamefield.has({ value: 'username' }))); - it.always('username should not be reset upon failed submit', () => { - expect(login.username.value).to.equal('username'); - }); - - it('password should be reset upon failed submit', () => { - expect(login.password.value).to.equal(''); - }); - - it('error message should be present upon failed submit', () => { - expect(login.message.isPresent).to.be.true; - }); + it('password should be reset upon failed submit', () => passwordfield.has({ value: '' })); it('error message should have proper text upon failed submit', () => { - expect(login.message.text).to.equal( - `${translations['errors.user.blocked']}${translations['errors.password.incorrect.warn.user']}` - ); + const res = [ + ErrorMessage(including(translations['errors.user.blocked'])).exists(), + ErrorMessage(including(translations['errors.password.incorrect.warn.user'])).exists() + ]; + return Promise.all(res); }); }); @@ -339,46 +180,22 @@ describe('Login', () => { scenarios: ['invalidResponseBody'], }); - beforeEach(async function () { - const { username, password, submit } = login; + beforeEach(loginAction); - await username.fill('username'); - await password.fill('password'); - await submit.click(); - }); + it('username should not be reset upon failed submit', always(() => usernamefield.has({ value: 'username' }))); - it.always('username should not be reset upon failed submit', () => { - expect(login.username.value).to.equal('username'); - }); - - it('password should be reset upon failed submit', () => { - expect(login.password.value).to.equal(''); - }); + it('password should be reset upon failed submit', () => passwordfield.has({ value: '' })); - it('error message should be present upon failed submit', () => { - expect(login.message.isPresent).to.be.true; - }); - - it('error message should have proper text upon failed submit', () => { - expect(login.message.text).to.equal( - translations['errors.default.error'] - ); - }); + it('error message should have proper text upon failed submit', () => ErrorMessage(translations['errors.default.error']).exists()); }); - }); - - describe('with valid credentials', () => { - beforeEach(async () => { - const { username, password, submit } = login; - await username.fill('username'); - await password.fill('password'); - await submit.click(); - await submit.blur(); - }); + describe('with valid credentials', () => { + beforeEach(async () => { + await loginAction(); + await loginButton.blur(); + }); - it('login page should not be displayed upon successful login', () => { - expect(login.isPresent).to.be.false; + it('login page should not be displayed upon successful login', () => usernamefield.absent()); }); }); }); diff --git a/test/bigtest/tests/module-hierarchy-test.js b/test/bigtest/tests/module-hierarchy-test.js index 4f3744340..de594820a 100644 --- a/test/bigtest/tests/module-hierarchy-test.js +++ b/test/bigtest/tests/module-hierarchy-test.js @@ -1,6 +1,6 @@ import React from 'react'; -import { describe, beforeEach, it } from '@bigtest/mocha'; +import { describe, beforeEach, it } from 'mocha'; import { expect } from 'chai'; import setupApplication from '../helpers/setup-core-application'; diff --git a/test/bigtest/tests/namespace-test.js b/test/bigtest/tests/namespace-test.js index 675b01645..54e8a09d6 100644 --- a/test/bigtest/tests/namespace-test.js +++ b/test/bigtest/tests/namespace-test.js @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { describe, beforeEach, it } from '@bigtest/mocha'; +import { describe, beforeEach, it } from 'mocha'; import { expect } from 'chai'; import setupApplication from '../helpers/setup-core-application'; diff --git a/test/bigtest/tests/nav-test.js b/test/bigtest/tests/nav-test.js index a53037157..128a18be9 100644 --- a/test/bigtest/tests/nav-test.js +++ b/test/bigtest/tests/nav-test.js @@ -1,8 +1,8 @@ -import { describe, beforeEach, it } from '@bigtest/mocha'; +import { describe, beforeEach, it } from 'mocha'; import { expect } from 'chai'; import React, { Component } from 'react'; - +import { Button } from '@folio/stripes-testing'; import setupApplication from '../helpers/setup-core-application'; import AppInteractor from '../interactors/app'; @@ -29,17 +29,11 @@ describe('Nav', () => { } }); - it('shows a settings button', () => { - expect(app.nav('Settings').isPresent).to.be.true; - }); + it('shows a settings button', () => Button('Settings').exists()); - it('shows a dummy app button', () => { - expect(app.nav('Dummy').isPresent).to.be.true; - }); + it('shows a dummy app button', () => Button('Dummy').exists()); - it('shows help button', function () { - expect(app.helpButton.isPresent).to.be.true; - }); + it('shows help button', () => Button({ id: 'helpButton' }).exists()); describe('clicking settings', () => { beforeEach(async () => { diff --git a/test/bigtest/tests/packageName-test.js b/test/bigtest/tests/packageName-test.js index a29100d4f..26f3999bc 100644 --- a/test/bigtest/tests/packageName-test.js +++ b/test/bigtest/tests/packageName-test.js @@ -1,7 +1,7 @@ import { describe, it, -} from '@bigtest/mocha'; +} from 'mocha'; import { expect } from 'chai'; import { packageName } from '../../../src/constants'; diff --git a/test/bigtest/tests/profile-dropdown-test.js b/test/bigtest/tests/profile-dropdown-test.js index d3cf81293..a0a3f475a 100644 --- a/test/bigtest/tests/profile-dropdown-test.js +++ b/test/bigtest/tests/profile-dropdown-test.js @@ -1,9 +1,7 @@ -import { describe, beforeEach, it } from '@bigtest/mocha'; -import { Interactor } from '@bigtest/interactor'; +import { describe, beforeEach, it } from 'mocha'; import { expect } from 'chai'; import React, { Component } from 'react'; -import DropdownInteractor from '@folio/stripes-components/lib/Dropdown/tests/interactor'; - +import { Dropdown as DropdownInteractor, HTML, TextField as LoginInteractor } from '@folio/stripes-testing'; import setupApplication from '../helpers/setup-application'; class DummyApp extends Component { @@ -12,9 +10,16 @@ class DummyApp extends Component { } } +const ProfileMenuInteractor = HTML.extend('profile menu') + .selector('div[class*=DropdownMenu]') + .filters({ + itemCount: el => el.querySelectorAll('[data-test-nav-list-item]').length + }); + describe('Profile dropdown', () => { - const dropdown = new DropdownInteractor('#profileDropdown'); - const loginInteractor = new Interactor('[data-test-new-username-field]'); + const profileDropdown = DropdownInteractor({ id: 'profileDropdown' }); + const profileMenu = ProfileMenuInteractor(); + const loginInteractor = LoginInteractor({ id: 'input-username' }); const modules = [{ type: 'app', @@ -55,22 +60,18 @@ describe('Profile dropdown', () => { this.visit('/dummy'); }); - it('renders', () => { - expect(dropdown.triggerDisplayed).to.be.true; - }); + it('renders', () => profileDropdown.exists()); describe('opening the dropdown', () => { beforeEach(async () => { - await dropdown.clickTrigger(); + await profileDropdown.toggle(); }); - it('displays the appropriate number of links', () => { - expect(dropdown.menu.items().length).to.equal(4); - }); + it('displays the appropriate number of links', () => profileMenu.has({ itemCount: 4 })); describe('clicking the home link', () => { beforeEach(async () => { - await dropdown.menu.items(0).click(); + await ProfileMenuInteractor().find(HTML('Home')).click(); }); it('changes the url', function () { @@ -80,7 +81,7 @@ describe('Profile dropdown', () => { describe('clicking a userlink', () => { beforeEach(async () => { - await dropdown.menu.items(1).click(); + await profileMenu.find(HTML('Okay')).click(); }); it('changes the url', function () { @@ -90,7 +91,7 @@ describe('Profile dropdown', () => { describe('clicking a Change Password link', () => { beforeEach(async () => { - await dropdown.menu.items(2).click(); + await profileMenu.find(HTML('Change password')).click(); }); it('changes the url', function () { @@ -100,12 +101,10 @@ describe('Profile dropdown', () => { describe('clicking logout', () => { beforeEach(async () => { - await dropdown.menu.items(3).click(); + await profileMenu.find(HTML('Log out')).click(); }); - it('changes the url', () => { - expect(loginInteractor.isPresent).to.be.true; - }); + it('changes the url', () => loginInteractor.exists()); }); }); }); diff --git a/test/bigtest/tests/session-timeout-test.js b/test/bigtest/tests/session-timeout-test.js deleted file mode 100644 index f6e8046e4..000000000 --- a/test/bigtest/tests/session-timeout-test.js +++ /dev/null @@ -1,24 +0,0 @@ -import { describe, beforeEach, it } from '@bigtest/mocha'; -import { expect } from 'chai'; - -import setupApplication from '../helpers/setup-core-application'; -import LoginInteractor from '../interactors/login'; -import translations from '../../../translations/stripes-core/en'; - -describe.skip('Session timeout test', () => { - const login = new LoginInteractor('form[class^="form--"]'); - - setupApplication({ - scenarios: ['invalidToken'] - }); - - describe('clicking settings', () => { - beforeEach(function () { - this.visit('/settings/about'); - }); - - it('should redirect to login with session timeout message', function () { - expect(login.message.text).to.equal(translations['errors.user.timeout']); - }); - }); -}); diff --git a/test/bigtest/tests/statusPage-test.js b/test/bigtest/tests/statusPage-test.js index 1a66f4576..e0d08a1dc 100644 --- a/test/bigtest/tests/statusPage-test.js +++ b/test/bigtest/tests/statusPage-test.js @@ -1,11 +1,10 @@ -import { beforeEach, describe, it } from '@bigtest/mocha'; -import { expect } from 'chai'; +import { beforeEach, describe, it } from 'mocha'; import translations from '../../../translations/stripes-core/en'; import setupApplication from '../helpers/setup-core-application'; -import StatusPageInteractor from '../interactors/StatusPage'; +import { StatusPage as StatusPageInteractor } from '../interactors/common'; -describe('Forgot username form test', () => { +describe('Forgot username/password status test', () => { setupApplication({ disableAuth: false }); beforeEach(function () { @@ -15,47 +14,22 @@ describe('Forgot username form test', () => { }); }); - const statusPage = new StatusPageInteractor(); - const { - heading, - notificationParagraph, - cautionParagraph, - } = statusPage; + const statusPage = StatusPageInteractor(); describe('check email status page tests', () => { - it('should display a status page to the user', () => { - expect(statusPage.isPresent).to.be.true; - }); - - it('should display a header', () => { - expect(heading.isPresent).to.be.true; - }); + it('should display a status page to the user', () => statusPage.exists()); it(`should have the header with an appropriate text content equal to check email label in english translation`, () => { - expect(heading.text).to.equal(translations['label.check.email']); - }); - - it('should display a paragraph with notification', () => { - expect(notificationParagraph.isPresent).to.be.true; + statusPage.has({ headerText: translations['label.check.email'] }); }); it(`should have the paragraph with an appropriate text content - equal to sent email precautions label in english translation`, () => { - expect(notificationParagraph.text).to.equal( - translations['label.your.email'] - ); - }); - - it('should display a paragraph with precautions', () => { - expect(cautionParagraph.isPresent).to.be.true; - }); + equal to sent email precautions label in english translation`, + () => statusPage.has({ notificationText: translations['label.your.email'] })); it(`should have the paragraph with an appropriate text content - equal to check email precautions label in english translation`, () => { - expect(cautionParagraph.text).to.equal( - translations['label.caution.email'] - ); - }); + equal to check email precautions label in english translation`, + () => statusPage.has({ cautionText: translations['label.caution.email'] })); }); }); diff --git a/test/bigtest/tests/useCustomFields-test.js b/test/bigtest/tests/useCustomFields-test.js index e6cb7763c..b769d83fc 100644 --- a/test/bigtest/tests/useCustomFields-test.js +++ b/test/bigtest/tests/useCustomFields-test.js @@ -1,5 +1,5 @@ import React from 'react'; -import { afterEach, beforeEach, describe, it } from '@bigtest/mocha'; +import { afterEach, beforeEach, describe, it } from 'mocha'; import { expect } from 'chai'; import setupApplication from '../helpers/setup-core-application'; diff --git a/yarn.lock b/yarn.lock index c04af2d8f..3aec5a092 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,6 +7,22 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@actions/core@^1.10.0": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.10.1.tgz#61108e7ac40acae95ee36da074fa5850ca4ced8a" + integrity sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g== + dependencies: + "@actions/http-client" "^2.0.1" + uuid "^8.3.2" + +"@actions/http-client@^2.0.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.1.tgz#ed3fe7a5a6d317ac1d39886b0bb999ded229bb38" + integrity sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw== + dependencies: + tunnel "^0.0.6" + undici "^5.25.4" + "@adobe/css-tools@^4.0.1": version "4.3.3" resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff" @@ -217,6 +233,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== +"@babel/helper-plugin-utils@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz#fa02a32410a15a6e8f8185bcbf608f10528d2a24" + integrity sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg== + "@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" @@ -304,6 +325,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== +"@babel/parser@^7.23.0": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.6.tgz#5e030f440c3c6c78d195528c3b688b101a365328" + integrity sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q== + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.4": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz#6125f0158543fb4edf1c22f322f3db67f21cb3e1" @@ -458,6 +484,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.22.5": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz#bcca2964150437f88f65e3679e3d68762287b9c8" + integrity sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.24.1", "@babel/plugin-syntax-jsx@^7.7.2": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" @@ -1191,11 +1224,6 @@ resolved "https://registry.yarnpkg.com/@bigtest/convergence/-/convergence-0.10.0.tgz#ed2212b7034c84917ccfbaa8cf875730ee535702" integrity sha512-jJBPq3TTmMD/s/5k/mINzL6EXyPdNq0cEDZXufICFjpXmuUabRS/PX/NfzmXVlNENDJ6yOrDnrsO4IJboNTu9g== -"@bigtest/convergence@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@bigtest/convergence/-/convergence-1.1.2.tgz#1028f28378aae6876b3c07e577a2d4a320ad0acf" - integrity sha512-f/tpOfdd5p40Omejmc+jwrNL0nZ0RDV2LEQQdIWYHtMdKfQQRQpdAhyfNVPLuLeKHw5D9dUX8v9WOrwGsMBTAw== - "@bigtest/globals@^0.7.5": version "0.7.6" resolved "https://registry.yarnpkg.com/@bigtest/globals/-/globals-0.7.6.tgz#e435d370059cfde66b20d31ba1d91cf0db63ba53" @@ -1232,13 +1260,6 @@ lodash "^4.17.4" pretender "^2.0.0" -"@bigtest/mocha@^0.5.1": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@bigtest/mocha/-/mocha-0.5.2.tgz#df54959636067448a1c0fd36d19ba1b1a491604f" - integrity sha512-DBm+ndNyJndjxNp84v+oGaqfuWz4XnVKIKseFzFpqr2y2p1Don81m5o6vB14DnS1vIQvPhDsnWHU6v7ekq9u6g== - dependencies: - "@bigtest/convergence" "^1.1.1" - "@bigtest/performance@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@bigtest/performance/-/performance-0.5.0.tgz#195f2c445cbe2ebe4357e08f7b39449240bf62d7" @@ -1335,6 +1356,58 @@ resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-1.0.0.tgz#42f3c213f2fb929324d465684ab9f46a0febd4bb" integrity sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg== +"@currents/commit-info@1.0.1-beta.0": + version "1.0.1-beta.0" + resolved "https://registry.yarnpkg.com/@currents/commit-info/-/commit-info-1.0.1-beta.0.tgz#c33112685c27896bba29064234fd2341ec9134e6" + integrity sha512-gkn8E3UC+F4/fCla7QAGMGgGPzxZUL9bU9+4I+KZf9PtCU3DdQCdy7a+er2eg4ewfUzZ2Ic1HcfnHuPkuLPKIw== + dependencies: + bluebird "3.5.5" + check-more-types "2.24.0" + debug "4.3.4" + execa "1.0.0" + lazy-ass "1.6.0" + ramda "0.26.1" + +"@cypress/request@^2.88.10": + version "2.88.12" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.12.tgz#ba4911431738494a85e93fb04498cb38bc55d590" + integrity sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + http-signature "~1.3.6" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + performance-now "^2.1.0" + qs "~6.10.3" + safe-buffer "^5.1.2" + tough-cookie "^4.1.3" + tunnel-agent "^0.6.0" + uuid "^8.3.2" + +"@cypress/xvfb@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + +"@dependents/detective-less@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@dependents/detective-less/-/detective-less-5.0.0.tgz#e06bd05352a9e90ad337c740ea98783709e0630c" + integrity sha512-D/9dozteKcutI5OdxJd8rU+fL6XgaaRg60sPPJWkT33OCiRfkCu5wO5B/yXTaaL2e6EB0lcCBGe5E0XscZCvvQ== + dependencies: + gonzales-pe "^4.3.0" + node-source-walk "^7.0.0" + "@discoveryjs/json-ext@0.5.7": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" @@ -1345,116 +1418,238 @@ resolved "https://registry.yarnpkg.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz#df79b7ea62c55094dc129880387864cdf41eca7c" integrity sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw== +"@effection/core@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@effection/core/-/core-2.2.0.tgz#4d11d7948144aecd70a26daf8abaa29ee89bc259" + integrity sha512-1RBMrDS0Ya02NEM0TQQRwzlGDSZmwoHhuD3qmWp9NLjZowhO1gJBZ16fQL2NbKvcpS71xho+oZsDedId+C1q8Q== + dependencies: + abort-controller "^3.0.0" + +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + "@esbuild/android-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + "@esbuild/android-arm@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + "@esbuild/android-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + "@esbuild/darwin-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + "@esbuild/darwin-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + "@esbuild/freebsd-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + "@esbuild/freebsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + "@esbuild/linux-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + "@esbuild/linux-arm@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + "@esbuild/linux-ia32@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + "@esbuild/linux-loong64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + "@esbuild/linux-mips64el@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + "@esbuild/linux-ppc64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + "@esbuild/linux-riscv64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + "@esbuild/linux-s390x@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + "@esbuild/linux-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + "@esbuild/netbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + "@esbuild/openbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + "@esbuild/sunos-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + "@esbuild/win32-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + "@esbuild/win32-ia32@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + "@esbuild/win32-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1482,6 +1677,11 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + "@folio/eslint-config-stripes@^7.0.0": version "7.2.100000135" resolved "https://repository.folio.org/repository/npm-folioci/@folio/eslint-config-stripes/-/eslint-config-stripes-7.2.100000135.tgz#bf0efabe4d2884b9c04ca6d0a6d71897df371c76" @@ -1581,11 +1781,10 @@ webpack-bundle-analyzer "^4.4.2" yargs "^17.3.1" -"@folio/stripes-components@^12.0.0": - version "12.2.1000004277" - resolved "https://repository.folio.org/repository/npm-folioci/@folio/stripes-components/-/stripes-components-12.2.1000004277.tgz#c49e1bc61b9e629705ce5d562c33800879d9f156" - integrity sha512-3Y724MLT+dsmHg8EBdaSXzRH+SOzE/z2g46GK4k0QTHOZsp3QkehmsV5KwmnRbTpENe/e4X9HLaZiout5fzPVg== - +"@folio/stripes-components@^12.2.0": + version "12.2.1000004354" + resolved "https://repository.folio.org/repository/npm-folioci/@folio/stripes-components/-/stripes-components-12.2.1000004354.tgz#1a3ce4dfd3beead2b0c56e7c591bf689c300622a" + integrity sha512-sCl8hu57evKVl6Ijeh0It1R/jYnO2BRLSLdiqA3VlgYHVT87PH+nELbl9ZZZc8gwqH2/J+UgAYH6G2FN9A9LAg== dependencies: "@csstools/postcss-global-data" "^2.1.1" "@folio/stripes-react-hotkeys" "^3.0.5" @@ -1638,7 +1837,7 @@ lodash "^4.17.15" prop-types "^15.7.2" -"@folio/stripes-testing@^3.0.0", "@folio/stripes-testing@^3.1.0": +"@folio/stripes-testing@^3.0.0": version "3.1.10000011260" resolved "https://repository.folio.org/repository/npm-folioci/@folio/stripes-testing/-/stripes-testing-3.1.10000011260.tgz#05573c689efdc574652ae774a6ec4867edd9480b" integrity sha512-yJm+yIAZm2wSpJDgtVYKQPWN5WMY2RO8dSTs6F1lNETF/97PxlL9afEmaBmEN13vUlowlL9TbQ95MPidDo5Z4g== @@ -1649,6 +1848,22 @@ element-is-visible "^1.0.0" minimist "^1.2.0" +"@folio/stripes-testing@^4.5.0": + version "4.8.10000030238" + resolved "https://repository.folio.org/repository/npm-folioci/@folio/stripes-testing/-/stripes-testing-4.8.10000030238.tgz#be4f2c0da14870a9a65285e59b3288ff1c17c1a1" + integrity sha512-0wdE4pHKfLH9BMOHSk7s+dJdj7tbDwYe4Q0RN/dmVsIwHFFQHd2usxHvGhgy5uF2+4zR1XntPsWh4kSxHg0ElQ== + dependencies: + "@interactors/html" "^1.0.0-rc1.4" + "@interactors/keyboard" "^1.0.0-rc1.5" + axe-core "4.3.3" + cypress "12.0.0" + cypress-cloud "^1.9.6" + cypress-testrail-simple "^3.1.0" + date-fns "^2.16.1" + debug "^4.0.1" + element-is-visible "^1.0.0" + moment "^2.29.3" + "@folio/stripes-webpack@^5.0.0": version "5.2.100000625" resolved "https://repository.folio.org/repository/npm-folioci/@folio/stripes-webpack/-/stripes-webpack-5.2.100000625.tgz#c849d77041e557514986a1b1fc2cd94b1f2a9255" @@ -1844,6 +2059,43 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@interactors/core@1.0.0-rc1.6": + version "1.0.0-rc1.6" + resolved "https://registry.yarnpkg.com/@interactors/core/-/core-1.0.0-rc1.6.tgz#5dd5b00771808637002e2e110a4dd7659b58d2db" + integrity sha512-uHR02Yc+VMAXRbrYtLiwbqwbvD/dHteEkdajT+dHWhIYwe1uRZmNQybyFN43tnjg7f4nsyz0cUcb9MbSSdkN0w== + dependencies: + "@effection/core" "2.2.0" + "@interactors/globals" "1.0.0-rc1.3" + "@testing-library/dom" "^8.18.1" + "@testing-library/user-event" "^13.2.1" + change-case "^4.1.1" + element-is-visible "^1.0.0" + lodash.isequal "^4.5.0" + performance-api "^1.0.0" + +"@interactors/globals@1.0.0-rc1.3": + version "1.0.0-rc1.3" + resolved "https://registry.yarnpkg.com/@interactors/globals/-/globals-1.0.0-rc1.3.tgz#3e03b0a24002361071cd7146b80687d974ae048e" + integrity sha512-vb8SXh2oK5BK3AzHfxviAovtMc9QjS9ZSX95yhoh4zOPKC/zrVxzn5IoMdzwCyEjEiKWJP/iVxAAOFgEqC+oXw== + dependencies: + "@effection/core" "2.2.0" + +"@interactors/html@^1.0.0-rc1.4": + version "1.0.0-rc1.6" + resolved "https://registry.yarnpkg.com/@interactors/html/-/html-1.0.0-rc1.6.tgz#a8a2b9479d06ab0ce4eb26624ce343b7a582b8ee" + integrity sha512-MM8gwZdOBkJISxTIQ5j73a2+paEzhVRvfdd0bHG+U5euQ8LJGbDDLm1ay3eJ7OyBXlFarnLxeq05RVjeXcyyhg== + dependencies: + "@interactors/core" "1.0.0-rc1.6" + "@interactors/keyboard" "1.0.0-rc1.6" + +"@interactors/keyboard@1.0.0-rc1.6", "@interactors/keyboard@^1.0.0-rc1.5": + version "1.0.0-rc1.6" + resolved "https://registry.yarnpkg.com/@interactors/keyboard/-/keyboard-1.0.0-rc1.6.tgz#ab0771304afd17f313d1ed8d848de9152bed4fd4" + integrity sha512-zGSl9QRo04U2g4lVDkK6hfkyvDXueFRuWA8S2du0CjiF0RSIdwyUvIicJ9g6/ZkwuNMbnc6FrOKI0Pjt/zj3NA== + dependencies: + "@interactors/core" "1.0.0-rc1.6" + "@interactors/globals" "1.0.0-rc1.3" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2084,7 +2336,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -2311,6 +2563,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + "@sindresorhus/is@^5.2.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" @@ -2441,6 +2698,13 @@ "@svgr/plugin-jsx" "8.1.0" "@svgr/plugin-svgo" "8.1.0" +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + "@szmarczak/http-timer@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" @@ -2448,7 +2712,7 @@ dependencies: defer-to-connect "^2.0.1" -"@testing-library/dom@^8.11.1": +"@testing-library/dom@^8.11.1", "@testing-library/dom@^8.18.1": version "8.20.1" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== @@ -2500,6 +2764,13 @@ "@testing-library/dom" "^9.0.0" "@types/react-dom" "^18.0.0" +"@testing-library/user-event@^13.2.1": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-13.5.0.tgz#69d77007f1e124d55314a2b73fd204b333b13295" + integrity sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/user-event@^14.4.3": version "14.5.2" resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" @@ -2553,6 +2824,16 @@ dependencies: "@babel/types" "^7.20.7" +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + "@types/cookie@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" @@ -2618,7 +2899,7 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== -"@types/http-cache-semantics@^4.0.2": +"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.2": version "4.0.4" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== @@ -2674,6 +2955,13 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + "@types/node@*", "@types/node@>=10.0.0": version "20.12.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" @@ -2686,6 +2974,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== +"@types/node@^14.14.31": + version "14.18.63" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" + integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== + "@types/prop-types@*": version "15.7.12" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" @@ -2713,11 +3006,28 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + "@types/semver@^7.3.12", "@types/semver@^7.5.0": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== +"@types/sinonjs__fake-timers@8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" + integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== + +"@types/sizzle@^2.3.2": + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" + integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== + "@types/stack-utils@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" @@ -2757,6 +3067,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@^6.21.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" @@ -2821,6 +3138,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== +"@typescript-eslint/types@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.11.0.tgz#5e9702a5e8b424b7fc690e338d359939257d6722" + integrity sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w== + "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" @@ -2848,6 +3170,20 @@ semver "^7.5.4" ts-api-utils "^1.0.1" +"@typescript-eslint/typescript-estree@^7.6.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.11.0.tgz#7cbc569bc7336c3a494ceaf8204fdee5d5dbb7fa" + integrity sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ== + dependencies: + "@typescript-eslint/types" "7.11.0" + "@typescript-eslint/visitor-keys" "7.11.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + "@typescript-eslint/utils@6.21.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" @@ -2891,6 +3227,61 @@ "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" +"@typescript-eslint/visitor-keys@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.11.0.tgz#2c50cd292e67645eec05ac0830757071b4a4d597" + integrity sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ== + dependencies: + "@typescript-eslint/types" "7.11.0" + eslint-visitor-keys "^3.4.3" + +"@vue/compiler-core@3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.27.tgz#e69060f4b61429fe57976aa5872cfa21389e4d91" + integrity sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg== + dependencies: + "@babel/parser" "^7.24.4" + "@vue/shared" "3.4.27" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.0" + +"@vue/compiler-dom@3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz#d51d35f40d00ce235d7afc6ad8b09dfd92b1cc1c" + integrity sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw== + dependencies: + "@vue/compiler-core" "3.4.27" + "@vue/shared" "3.4.27" + +"@vue/compiler-sfc@^3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz#399cac1b75c6737bf5440dc9cf3c385bb2959701" + integrity sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA== + dependencies: + "@babel/parser" "^7.24.4" + "@vue/compiler-core" "3.4.27" + "@vue/compiler-dom" "3.4.27" + "@vue/compiler-ssr" "3.4.27" + "@vue/shared" "3.4.27" + estree-walker "^2.0.2" + magic-string "^0.30.10" + postcss "^8.4.38" + source-map-js "^1.2.0" + +"@vue/compiler-ssr@3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz#2a8ecfef1cf448b09be633901a9c020360472e3d" + integrity sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw== + dependencies: + "@vue/compiler-dom" "3.4.27" + "@vue/shared" "3.4.27" + +"@vue/shared@3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.27.tgz#f05e3cd107d157354bb4ae7a7b5fc9cf73c63b50" + integrity sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA== + "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" @@ -3067,6 +3458,13 @@ abab@^2.0.6: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.4, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -3093,7 +3491,7 @@ acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.0.0, acorn-walk@^8.0.2: +acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.2.0: version "8.3.2" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== @@ -3103,7 +3501,7 @@ acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.1.0, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2: +acorn@^8.0.4, acorn@^8.1.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -3194,7 +3592,7 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -3258,6 +3656,11 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +app-module-path@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" + integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== + append-transform@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" @@ -3265,11 +3668,21 @@ append-transform@^2.0.0: dependencies: default-require-extensions "^3.0.0" +arch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== +arg@^5.0.1, arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3393,11 +3806,28 @@ asn1.js@^4.10.1: inherits "^2.0.1" minimalistic-assert "^1.0.0" +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +ast-module-types@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/ast-module-types/-/ast-module-types-6.0.0.tgz#ea6132bb44a115717299dfdac934d2d13e8ecd93" + integrity sha512-LFRg7178Fw5R4FAEwZxVqiRI8IxSM+Ay2UBrHoCerXNme+kMMMfz7T3xDGV/c2fer87hcrtgJGsnSOfUrPK6ng== + ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -3408,7 +3838,7 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async@^3.2.2: +async@^3.2.0, async@^3.2.2: version "3.2.5" resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== @@ -3418,6 +3848,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + author-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" @@ -3442,11 +3877,43 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.0.tgz#d9b802e9bb9c248d7be5f7f5ef178dc3684e9dcc" + integrity sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g== + +axe-core@4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.3.tgz#b55cd8e8ddf659fe89b064680e1c6a4dceab0325" + integrity sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA== + axe-core@^4.4.3: version "4.9.0" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.9.0.tgz#b18971494551ab39d4ff5f7d4c6411bd20cc7c2a" integrity sha512-H5orY+M2Fr56DWmMFpMrq5Ge93qjNdPVqzBv5gWK3aD1OvjBEJlEzxf09z93dGVQeI0LiW+aCMIx1QtShC/zUw== +axios-retry@^3.4.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.9.1.tgz#c8924a8781c8e0a2c5244abf773deb7566b3830d" + integrity sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w== + dependencies: + "@babel/runtime" "^7.15.4" + is-retry-allowed "^2.2.0" + +axios@^1.2.0: + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -3618,6 +4085,13 @@ basic-auth@~2.0.1: dependencies: safe-buffer "5.1.2" +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + before-after-hook@^2.2.0: version "2.2.3" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" @@ -3647,6 +4121,21 @@ bl@^4.0.3, bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" +blob-util@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +bluebird@3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -3830,6 +4319,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +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-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -3840,7 +4334,7 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer@^5.5.0: +buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -3861,6 +4355,11 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + cacheable-lookup@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" @@ -3879,6 +4378,24 @@ cacheable-request@^10.2.8: normalize-url "^8.0.0" responselike "^3.0.0" +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +cachedir@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" + integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== + caching-transform@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" @@ -3942,6 +4459,11 @@ capital-case@^1.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + chai@^4.1.2: version "4.4.1" resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" @@ -3972,7 +4494,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4020,6 +4542,11 @@ check-error@^1.0.3: dependencies: get-func-name "^2.0.2" +check-more-types@2.24.0, check-more-types@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== + chokidar@3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -4112,6 +4639,23 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== +cli-table3@~0.6.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -4153,6 +4697,13 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -4218,12 +4769,12 @@ colord@^2.9.3: resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== -colorette@^2.0.10: +colorette@^2.0.10, colorette@^2.0.16: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -combined-stream@^1.0.8: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -4235,11 +4786,26 @@ commander@8, commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^12.0.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + commander@^2.15.1, commander@^2.20.0, commander@^2.9.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -4250,6 +4816,11 @@ common-path-prefix@^3.0.0: resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -4316,6 +4887,13 @@ connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" +console.table@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/console.table/-/console.table-0.10.0.tgz#0917025588875befd70cf2eff4bef2c6e2d75d04" + integrity sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g== + dependencies: + easy-table "1.1.0" + constant-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" @@ -4379,6 +4957,11 @@ core-js@^3.0.0, core-js@^3.26.1, core-js@^3.6.1: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.0.tgz#d8dde58e91d156b2547c19d8a4efd5c7f6c426bb" integrity sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug== +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -4463,6 +5046,17 @@ cross-fetch@^3.0.4: dependencies: node-fetch "^2.6.12" +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^7.0.0, 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" @@ -4642,6 +5236,109 @@ custom-event@~1.0.0: resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== +cy2@^3.4.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/cy2/-/cy2-3.4.3.tgz#c61665a953256e22399804f69067bb407ca922da" + integrity sha512-I1yfJWJTRy2ROti1TlLM5Qk86WSeKMrtZbY/G6VD2tjm3VKTu6pDkpcV56C2HhN+txK5p6MMsmzKXJM2W9JlxA== + dependencies: + acorn "^8.8.0" + debug "^4.3.2" + escodegen "^2.0.0" + estraverse "^5.3.0" + js-yaml "^4.1.0" + npm-which "^3.0.1" + slash "3.0.0" + +cypress-cloud@^1.9.6: + version "1.10.2" + resolved "https://registry.yarnpkg.com/cypress-cloud/-/cypress-cloud-1.10.2.tgz#f69c1508552c34671defe7debc929b211eb8db6f" + integrity sha512-KR0HCtmAncMO/duLQ0eK+Aq34DSnnuWlsKCW83tPzz2boNGJdrqcLzC2xHNJeUxq8TH/vva7LI4TvZBkPeZa3Q== + dependencies: + "@currents/commit-info" "1.0.1-beta.0" + axios "^1.2.0" + axios-retry "^3.4.0" + bluebird "^3.7.2" + chalk "^4.1.2" + commander "^10.0.0" + common-path-prefix "^3.0.0" + cy2 "^3.4.2" + debug "^4.3.4" + execa "^5.1.1" + getos "^3.2.1" + globby "^11.1.0" + is-absolute "^1.0.0" + lil-http-terminator "^1.2.3" + lodash "^4.17.21" + nanoid "^3.3.4" + plur "^4.0.0" + pretty-ms "^7.0.1" + source-map-support "^0.5.21" + table "^6.8.1" + tmp-promise "^3.0.3" + ts-pattern "^4.3.0" + ws "^8.13.0" + +cypress-testrail-simple@^3.1.0: + version "3.3.24" + resolved "https://registry.yarnpkg.com/cypress-testrail-simple/-/cypress-testrail-simple-3.3.24.tgz#297965651abc1d29a3268c94688e49b0f44463f1" + integrity sha512-20QgAFFpcBerY97eCOsmHTOjyBycNSBxI0K3+H+BmsgX+T0nxl/hFuVlA2QhSu9/yEDCZJK+V7BTQKD2wQtHww== + dependencies: + "@actions/core" "^1.10.0" + arg "^5.0.1" + debug "^4.3.2" + find-cypress-specs "^1.31.3" + find-test-names "^1.28.3" + globby "^11" + got "^11.8.2" + +cypress@12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.0.0.tgz#97138b6a92836b4f37138703d396f20925cb6a13" + integrity sha512-hX/UeaKrL4uiRxJh+eX9t5YFXJconJyqG0hkFkK6CG+4xj2mMmzvJERF3e2h/9TzvLxPAkQ6cGz8eaHfJZeyGg== + dependencies: + "@cypress/request" "^2.88.10" + "@cypress/xvfb" "^1.2.4" + "@types/node" "^14.14.31" + "@types/sinonjs__fake-timers" "8.1.1" + "@types/sizzle" "^2.3.2" + arch "^2.2.0" + blob-util "^2.0.2" + bluebird "^3.7.2" + buffer "^5.6.0" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + cli-cursor "^3.1.0" + cli-table3 "~0.6.1" + commander "^5.1.0" + common-tags "^1.8.0" + dayjs "^1.10.4" + debug "^4.3.2" + enquirer "^2.3.6" + eventemitter2 "6.4.7" + execa "4.1.0" + executable "^4.1.1" + extract-zip "2.0.1" + figures "^3.2.0" + fs-extra "^9.1.0" + getos "^3.2.1" + is-ci "^3.0.0" + is-installed-globally "~0.4.0" + lazy-ass "^1.6.0" + listr2 "^3.8.3" + lodash "^4.17.21" + log-symbols "^4.0.0" + minimist "^1.2.6" + ospath "^1.2.2" + pretty-bytes "^5.6.0" + proxy-from-env "1.0.0" + request-progress "^3.0.0" + semver "^7.3.2" + supports-color "^8.1.1" + tmp "~0.2.1" + untildify "^4.0.0" + yauzl "^2.10.0" + d@1, d@^1.0.1, d@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" @@ -4655,6 +5352,13 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -4712,6 +5416,11 @@ date-format@^4.0.14: resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== +dayjs@^1.10.4: + version "1.11.11" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e" + integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg== + dayjs@^1.11.10: version "1.11.10" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" @@ -4729,7 +5438,7 @@ debug@2.6.9, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: +debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, 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== @@ -4804,7 +5513,7 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.5.1" -deep-equal@^2.0.5: +deep-equal@^2.0.5, deep-equal@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== @@ -4857,7 +5566,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^2.0.1: +defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== @@ -4890,6 +5599,16 @@ depd@2.0.0, depd@~2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +dependency-tree@^11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-11.0.1.tgz#319c27652655f0ff63dc90809322156e90aa2a55" + integrity sha512-eCt7HSKIC9NxgIykG2DRq3Aewn9UhVS14MB3rEn6l/AsEI1FBg6ZGSlCU0SZ6Tjm2kkhj6/8c2pViinuyKELhg== + dependencies: + commander "^12.0.0" + filing-cabinet "^5.0.1" + precinct "^12.0.2" + typescript "^5.4.5" + deprecation@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -4928,6 +5647,81 @@ detect-node@^2.0.4, detect-node@^2.1.0: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== +detective-amd@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-6.0.0.tgz#29207f8309f3d2d130e3356d67f7fcd90e0c2cbf" + integrity sha512-NTqfYfwNsW7AQltKSEaWR66hGkTeD52Kz3eRQ+nfkA9ZFZt3iifRCWh+yZ/m6t3H42JFwVFTrml/D64R2PAIOA== + dependencies: + ast-module-types "^6.0.0" + escodegen "^2.1.0" + get-amd-module-type "^6.0.0" + node-source-walk "^7.0.0" + +detective-cjs@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detective-cjs/-/detective-cjs-6.0.0.tgz#65975719993fb4165a86e341a86784d7fcb4e3c8" + integrity sha512-R55jTS6Kkmy6ukdrbzY4x+I7KkXiuDPpFzUViFV/tm2PBGtTCjkh9ZmTuJc1SaziMHJOe636dtiZLEuzBL9drg== + dependencies: + ast-module-types "^6.0.0" + node-source-walk "^7.0.0" + +detective-es6@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detective-es6/-/detective-es6-5.0.0.tgz#0dc90a946a0120d93b28901395ec99c4642990bd" + integrity sha512-NGTnzjvgeMW1khUSEXCzPDoraLenWbUjCFjwxReH+Ir+P6LGjYtaBbAvITWn2H0VSC+eM7/9LFOTAkrta6hNYg== + dependencies: + node-source-walk "^7.0.0" + +detective-postcss@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/detective-postcss/-/detective-postcss-7.0.0.tgz#e9cff50836d67339a0bf4378f22dba4ed5809c01" + integrity sha512-pSXA6dyqmBPBuERpoOKKTUUjQCZwZPLRbd1VdsTbt6W+m/+6ROl4BbE87yQBUtLoK7yX8pvXHdKyM/xNIW9F7A== + dependencies: + is-url "^1.2.4" + postcss-values-parser "^6.0.2" + +detective-sass@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detective-sass/-/detective-sass-6.0.0.tgz#0585093840afe069ac2bdb55f662a1928c8f6d81" + integrity sha512-h5GCfFMkPm4ZUUfGHVPKNHKT8jV7cSmgK+s4dgQH4/dIUNh9/huR1fjEQrblOQNDalSU7k7g+tiW9LJ+nVEUhg== + dependencies: + gonzales-pe "^4.3.0" + node-source-walk "^7.0.0" + +detective-scss@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detective-scss/-/detective-scss-5.0.0.tgz#3603e967bfc541c28b5cc9ceccd21c36725d6d86" + integrity sha512-Y64HyMqntdsCh1qAH7ci95dk0nnpA29g319w/5d/oYcHolcGUVJbIhOirOFjfN1KnMAXAFm5FIkZ4l2EKFGgxg== + dependencies: + gonzales-pe "^4.3.0" + node-source-walk "^7.0.0" + +detective-stylus@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detective-stylus/-/detective-stylus-5.0.0.tgz#11c0464350d0b1484d6a7e281547280500c8353f" + integrity sha512-KMHOsPY6aq3196WteVhkY5FF+6Nnc/r7q741E+Gq+Ax9mhE2iwj8Hlw8pl+749hPDRDBHZ2WlgOjP+twIG61vQ== + +detective-typescript@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-13.0.0.tgz#41b391e77721b2872d70c96cc4d98261f9032353" + integrity sha512-tcMYfiFWoUejSbvSblw90NDt76/4mNftYCX0SMnVRYzSXv8Fvo06hi4JOPdNvVNxRtCAKg3MJ3cBJh+ygEMH+A== + dependencies: + "@typescript-eslint/typescript-estree" "^7.6.0" + ast-module-types "^6.0.0" + node-source-walk "^7.0.0" + +detective-vue2@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detective-vue2/-/detective-vue2-2.0.2.tgz#6f351790163af725928694df3f21dbbfe1df2c0d" + integrity sha512-7EWicLrVQjQ8gFCGWILUS8z04HSkVh1MmFemWRP+O9nAJgRSsOBiZwiODS8qer16BY2apNkYFDnvY/NcyCU4YA== + dependencies: + "@vue/compiler-sfc" "^3.4.27" + detective-es6 "^5.0.0" + detective-sass "^6.0.0" + detective-scss "^5.0.0" + detective-stylus "^5.0.0" + detective-typescript "^13.0.0" + di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" @@ -5115,6 +5909,21 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +easy-table@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.1.0.tgz#86f9ab4c102f0371b7297b92a651d5824bc8cb73" + integrity sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA== + optionalDependencies: + wcwidth ">=1.0.1" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -5225,7 +6034,7 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.16.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.5: +enquirer@^2.3.5, enquirer@^2.3.6: version "2.4.1" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== @@ -5243,7 +6052,7 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^4.2.0, entities@^4.4.0: +entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -5465,6 +6274,35 @@ esbuild@^0.17.6: "@esbuild/win32-ia32" "0.17.19" "@esbuild/win32-x64" "0.17.19" +esbuild@~0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" + escalade@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" @@ -5495,7 +6333,7 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: +escodegen@^2.0.0, escodegen@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== @@ -5683,7 +6521,7 @@ eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== @@ -5782,6 +6620,11 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -5813,6 +6656,16 @@ event-stream@=3.3.4: stream-combiner "~0.0.4" through "~2.3.1" +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter2@6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== + eventemitter3@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" @@ -5836,7 +6689,35 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@^5.0.0: +execa@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -5851,6 +6732,13 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +executable@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -5916,7 +6804,7 @@ ext@^1.7.0: dependencies: type "^2.7.2" -extend@^3.0.0, extend@^3.0.2: +extend@^3.0.0, extend@^3.0.2, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -5930,6 +6818,27 @@ 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" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + fake-xml-http-request@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fake-xml-http-request/-/fake-xml-http-request-2.1.2.tgz#f1786720cae50bbb46273035a0173414f3e85e74" @@ -6032,7 +6941,14 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -figures@^3.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, figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -6053,6 +6969,23 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" +filing-cabinet@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/filing-cabinet/-/filing-cabinet-5.0.2.tgz#5d35bce3216af258a7ce7d3561d68ed86fb37d6f" + integrity sha512-RZlFj8lzyu6jqtFBeXNqUjjNG6xm+gwXue3T70pRxw1W40kJwlgq0PSWAmh0nAnn5DHuBIecLXk9+1VKS9ICXA== + dependencies: + app-module-path "^2.2.0" + commander "^12.0.0" + enhanced-resolve "^5.16.0" + module-definition "^6.0.0" + module-lookup-amd "^9.0.1" + resolve "^1.22.8" + resolve-dependency-path "^4.0.0" + sass-lookup "^6.0.1" + stylus-lookup "^6.0.0" + tsconfig-paths "^4.2.0" + typescript "^5.4.4" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -6137,11 +7070,41 @@ find-cache-dir@^4.0.0: common-path-prefix "^3.0.0" pkg-dir "^7.0.0" +find-cypress-specs@^1.31.3: + version "1.43.3" + resolved "https://registry.yarnpkg.com/find-cypress-specs/-/find-cypress-specs-1.43.3.tgz#d22b7ef4f93e49f69ae56704289ef1532d44f121" + integrity sha512-S/2c8W1SbuwY1MmQD1Md9jYNPm3298o1+VGJNrw70CcPrkjw0ASltDFRddcD0cFLmE8jOT9C/EwdZMi3RaM0jA== + dependencies: + "@actions/core" "^1.10.0" + arg "^5.0.1" + console.table "^0.10.0" + debug "^4.3.3" + find-test-names "1.28.18" + globby "^11.1.0" + minimatch "^3.0.4" + pluralize "^8.0.0" + require-and-forget "^1.0.1" + shelljs "^0.8.5" + spec-change "^1.11.0" + tsx "^4.7.1" + find-root@^1.0.0, find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== +find-test-names@1.28.18, find-test-names@^1.28.3: + version "1.28.18" + resolved "https://registry.yarnpkg.com/find-test-names/-/find-test-names-1.28.18.tgz#a10acba4ebd2e6db8e182e0fcc6f85d78fa29969" + integrity sha512-hhnGdkWK+qEA5Z02Tu0OqGQIUjFZNyOCE4WaJpbhW4hAF1+NZ7OCr0Bss9RCaj7BBtjoIjkU93utobQ8pg2iVg== + dependencies: + "@babel/parser" "^7.23.0" + "@babel/plugin-syntax-jsx" "^7.22.5" + acorn-walk "^8.2.0" + debug "^4.3.3" + globby "^11.0.4" + simple-bin-help "^1.8.0" + find-up@5.0.0, find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -6219,7 +7182,7 @@ flexboxgrid2@^7.2.0: dependencies: normalize.css "^7.0.0" -follow-redirects@^1.0.0: +follow-redirects@^1.0.0, follow-redirects@^1.15.6: version "1.15.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== @@ -6239,6 +7202,11 @@ foreground-child@^2.0.0: cross-spawn "^7.0.0" signal-exit "^3.0.2" +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + form-data-encoder@^2.1.2: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" @@ -6250,7 +7218,16 @@ form-data@^4.0.0: integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.8" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" mime-types "^2.1.12" forwarded@0.2.0: @@ -6310,6 +7287,16 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-monkey@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" @@ -6320,7 +7307,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -6355,6 +7342,14 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +get-amd-module-type@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-amd-module-type/-/get-amd-module-type-6.0.0.tgz#702ddcbe6cb8a41ab8f69ce5ea520bf3b0ede69a" + integrity sha512-hFM7oivtlgJ3d6XWD6G47l8Wyh/C6vFw5G24Kk1Tbq85yh5gcM8Fne5/lFhiuxB+RT6+SI7I1ThB9lG4FBh3jw== + dependencies: + ast-module-types "^6.0.0" + node-source-walk "^7.0.0" + get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -6376,6 +7371,11 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -6386,6 +7386,20 @@ get-stdin@^6.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -6407,6 +7421,27 @@ get-tsconfig@^4.4.0: dependencies: resolve-pkg-maps "^1.0.0" +get-tsconfig@^4.7.5: + version "4.7.5" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" + integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw== + dependencies: + resolve-pkg-maps "^1.0.0" + +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== + dependencies: + async "^3.2.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" @@ -6435,7 +7470,7 @@ glob@8.1.0: minimatch "^5.0.1" once "^1.3.0" -glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: +glob@^7.0.0, glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -6506,7 +7541,7 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.1.0: +globby@^11, globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -6523,6 +7558,13 @@ globjoin@^0.1.4: resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== +gonzales-pe@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -6530,6 +7572,23 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +got@^11.8.2: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + got@^12.1.0: version "12.6.1" resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" @@ -6804,7 +7863,7 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-cache-semantics@^4.1.1: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -6838,6 +7897,23 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-signature@~1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + http2-wrapper@^2.1.10: version "2.2.1" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" @@ -6862,6 +7938,11 @@ https-proxy-agent@^5.0.1: agent-base "6" debug "4" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -6944,6 +8025,13 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +inactivity-timer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/inactivity-timer/-/inactivity-timer-1.0.0.tgz#054bf48274efea5c82713cb051b945fb42ec59bb" + integrity sha512-kxWME4cNy0TKfy9wwJ2L3oCV1JDFQTPGtYdw3Zvpiv5GbZwfnCwfESJgM1MQaYcrzLYOziiU3YEAgWOafL7Kdw== + dependencies: + ms "^2.1.1" + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -7012,7 +8100,7 @@ internal-slot@^1.0.4, internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" -interpret@^1.4.0: +interpret@^1.0.0, interpret@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== @@ -7039,6 +8127,19 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +irregular-plurals@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.5.0.tgz#0835e6639aa8425bdc8b0d33d0dc4e89d9c01d2b" + integrity sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ== + +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -7092,7 +8193,7 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-ci@^3.0.1: +is-ci@^3.0.0, is-ci@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== @@ -7147,7 +8248,7 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.4.0: +is-installed-globally@^0.4.0, is-installed-globally@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== @@ -7187,7 +8288,7 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0: +is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== @@ -7244,6 +8345,23 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + +is-retry-allowed@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" + integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== + is-running@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-running/-/is-running-2.1.0.tgz#30a73ff5cc3854e4fc25490809e9f5abf8de09e0" @@ -7261,6 +8379,11 @@ is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: dependencies: call-bind "^1.0.7" +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -7287,16 +8410,33 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" -is-typedarray@^1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-url-superb@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2" + integrity sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA== + +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + is-weakmap@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" @@ -7317,7 +8457,7 @@ is-weakset@^2.0.3: call-bind "^1.0.7" get-intrinsic "^1.2.4" -is-windows@^1.0.2: +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -7364,6 +8504,11 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + istanbul-lib-coverage@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" @@ -7929,6 +9074,11 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + jsdom@^20.0.0: version "20.0.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" @@ -8020,6 +9170,11 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -8035,6 +9190,11 @@ json-stable-stringify@^1.0.1: jsonify "^0.0.1" object-keys "^1.1.1" +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + json2csv@^4.2.1: version "4.5.4" resolved "https://registry.yarnpkg.com/json2csv/-/json2csv-4.5.4.tgz#2b59c2869a137ec48cd2e243e0180466155f773f" @@ -8051,7 +9211,7 @@ json5@^1.0.1, json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.3: +json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -8082,6 +9242,16 @@ jsonparse@^1.3.1: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" @@ -8210,7 +9380,7 @@ keyboardjs@~2.5.1: resolved "https://registry.yarnpkg.com/keyboardjs/-/keyboardjs-2.5.1.tgz#2eb5d96bd1028e07136cd71919f607579edca716" integrity sha512-mRf7MQMiFcudADEpPn3vTtl/rtFELo5MAiKA6yH4ShsFsnwwjMrVfaNt6bpYhBDeODs/T5NXwltz4+ktRQyP7A== -keyv@^4.5.3, keyv@^4.5.4: +keyv@^4.0.0, keyv@^4.5.3, keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -8261,6 +9431,16 @@ latest-version@^7.0.0: dependencies: package-json "^8.1.0" +lazy-ass@1.6.0, lazy-ass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== + +lazy-ass@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-2.0.3.tgz#1e8451729f2bebdff1218bb18921566a08f81b36" + integrity sha512-/O3/DoQmI1XAhklDvF1dAjFf/epE8u3lzOZegQfLZ8G7Ud5bTRSZiFOpukHCu6jODrCA4gtIdwUCC7htxcDACA== + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -8281,11 +9461,30 @@ lie@3.1.1: dependencies: immediate "~3.0.5" +lil-http-terminator@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/lil-http-terminator/-/lil-http-terminator-1.2.3.tgz#594ef0f3c2b2f7d43a8f2989b2b3de611bf507eb" + integrity sha512-vQcHSwAFq/kTR2cG6peOVS7SjgksGgSPeH0G2lkw+buue33thE/FCHdn10wJXXshc5RswFy0Iaz48qA2Busw5Q== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +listr2@^3.8.3: + version "3.14.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" @@ -8383,6 +9582,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -8393,7 +9597,7 @@ lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.2 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@4.1.0, log-symbols@^4.1.0: +log-symbols@4.1.0, log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -8408,6 +9612,16 @@ log-symbols@^2.1.0: dependencies: chalk "^2.0.1" +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + log4js@^6.4.1: version "6.9.1" resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" @@ -8448,6 +9662,11 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lowercase-keys@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" @@ -8477,6 +9696,13 @@ lz-string@^1.5.0: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== +magic-string@^0.30.10: + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -8628,7 +9854,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -8650,6 +9876,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -8718,7 +9949,7 @@ minimatch@^8.0.2: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.3: +minimatch@^9.0.3, minimatch@^9.0.4: version "9.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== @@ -8835,6 +10066,24 @@ mocha@^10.2.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" +module-definition@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-6.0.0.tgz#724b4c57543f53f814d2892499857777c3859630" + integrity sha512-sEGP5nKEXU7fGSZUML/coJbrO+yQtxcppDAYWRE9ovWsTbFoUHB2qDUx564WUzDaBHXsD46JBbIK5WVTwCyu3w== + dependencies: + ast-module-types "^6.0.0" + node-source-walk "^7.0.0" + +module-lookup-amd@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/module-lookup-amd/-/module-lookup-amd-9.0.1.tgz#2fb92d962b065e084add7e48d17c32cf3ff0056c" + integrity sha512-MFeZCK6j2k7fXlldyZ1FgA5goTmvLF0BCQKkxzapsvsPqhCM6NvanE0vy9x5HpY5ETF1yo+PCB9TZIow3PABYg== + dependencies: + commander "^12.0.0" + glob "^7.2.3" + requirejs "^2.3.6" + requirejs-config-file "^4.0.0" + moment-range@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/moment-range/-/moment-range-4.0.2.tgz#f7c3863df2a1ed7fd1822ba5a7bcf53a78701be9" @@ -8849,7 +10098,7 @@ moment-timezone@^0.5.14: dependencies: moment "^2.29.4" -moment@^2.29.0, moment@^2.29.4: +moment@^2.29.0, moment@^2.29.3, moment@^2.29.4: version "2.30.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== @@ -8887,7 +10136,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -8904,7 +10153,7 @@ nano-time@1.0.0: dependencies: big-integer "^1.6.16" -nanoid@^3.3.7: +nanoid@^3.3.4, nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -8934,6 +10183,11 @@ next-tick@^1.1.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -8983,6 +10237,13 @@ node-releases@^2.0.14: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-source-walk@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-7.0.0.tgz#cd849f539939994868a0b2ba4e9758322b2fcee6" + integrity sha512-1uiY543L+N7Og4yswvlm5NCKgPKDEXd9AUR9Jh3gen6oOeBsesr6LqhXom1er3eRzSUcVRWXzhv8tSNrIfGHKw== + dependencies: + "@babel/parser" "^7.24.4" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -8993,6 +10254,11 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + normalize-url@^8.0.0: version "8.0.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" @@ -9008,13 +10274,36 @@ normalize.css@^8.0.1: resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== -npm-run-path@^4.0.1: +npm-path@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== + dependencies: + which "^1.2.10" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A== + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -9220,11 +10509,26 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + p-cancelable@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -9295,6 +10599,13 @@ p-map@^3.0.0: dependencies: aggregate-error "^3.0.0" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -9379,6 +10690,11 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + parse5@^7.0.0, parse5@^7.1.1, parse5@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" @@ -9432,6 +10748,11 @@ path-is-inside@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -9490,6 +10811,21 @@ pbkdf2@^3.0.3, pbkdf2@^3.1.2: safe-buffer "^5.0.1" sha.js "^2.4.8" +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-api@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/performance-api/-/performance-api-1.0.0.tgz#0fe0198fa2db8f92e2786be1166fd134648cec9e" + integrity sha512-hZKWxgX3+rv9iPA6hBTr9U+9rNN8mf5joahZ5m9z/fEoqyfS/9qkVs7GGrb/JifjNlgqgduK6uWp+16n+petMg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -9500,7 +10836,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.3.0: +pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== @@ -9548,6 +10884,18 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" +plur@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/plur/-/plur-4.0.0.tgz#729aedb08f452645fe8c58ef115bf16b0a73ef84" + integrity sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg== + dependencies: + irregular-plurals "^3.2.0" + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + popper.js@^1.14.6: version "1.16.1" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" @@ -9637,6 +10985,15 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss-values-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz#636edc5b86c953896f1bb0d7a7a6615df00fb76f" + integrity sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw== + dependencies: + color-name "^1.1.4" + is-url-superb "^4.0.0" + quote-unquote "^1.0.0" + postcss@^8.4.2, postcss@^8.4.33, postcss@^8.4.38: version "8.4.38" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" @@ -9664,6 +11021,27 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" +precinct@^12.0.2: + version "12.1.1" + resolved "https://registry.yarnpkg.com/precinct/-/precinct-12.1.1.tgz#458e217c6ab51f964a03c2a7352a40ab009c4611" + integrity sha512-Vmmtp0QdtM0Z5NzkRG09AgUgBwOpG0KW9KvG1vkltx+e2zrGCWbM5661f6lf8YjKbJhM39TICA6Wc36ZzX1PqQ== + dependencies: + "@dependents/detective-less" "^5.0.0" + commander "^12.0.0" + detective-amd "^6.0.0" + detective-cjs "^6.0.0" + detective-es6 "^5.0.0" + detective-postcss "^7.0.0" + detective-sass "^6.0.0" + detective-scss "^5.0.0" + detective-stylus "^5.0.0" + detective-typescript "^13.0.0" + detective-vue2 "^2.0.0" + module-definition "^6.0.0" + node-source-walk "^7.0.0" + postcss "^8.4.38" + typescript "^5.4.5" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -9686,6 +11064,11 @@ pretender@^3.4.7: fake-xml-http-request "^2.1.2" route-recognizer "^0.3.3" +pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -9712,6 +11095,13 @@ pretty-format@^29.0.0, pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" +pretty-ms@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -9777,6 +11167,16 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== + +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== + ps-tree@=1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" @@ -9843,6 +11243,13 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" +qs@~6.10.3: + version "6.10.5" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4" + integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ== + dependencies: + side-channel "^1.0.4" + query-string@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" @@ -9903,6 +11310,16 @@ quill@^1.3.7: parchment "^1.1.4" quill-delta "^3.6.2" +quote-unquote@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/quote-unquote/-/quote-unquote-1.0.0.tgz#67a9a77148effeaf81a4d428404a710baaac8a0b" + integrity sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg== + +ramda@0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" + integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -10157,6 +11574,13 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -10313,6 +11737,20 @@ renderkid@^3.0.0: lodash "^4.17.21" strip-ansi "^6.0.1" +request-progress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== + dependencies: + throttleit "^1.0.0" + +require-and-forget@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-and-forget/-/require-and-forget-1.0.1.tgz#b535a1b8f0f0dd6a48ab05b0ab15d26135d61142" + integrity sha512-Sea861D/seGo3cptxc857a34Df0oEijXit8Q3IDodiwZMzVmyXrRI9EgQQa3hjkhoEjNzCBvv0t/0fMgebmWLg== + dependencies: + debug "4.3.4" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -10333,6 +11771,19 @@ requireindex@^1.2.0: resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== +requirejs-config-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz#4244da5dd1f59874038cc1091d078d620abb6ebc" + integrity sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw== + dependencies: + esprima "^4.0.0" + stringify-object "^3.2.1" + +requirejs@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9" + integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg== + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -10343,7 +11794,7 @@ reselect@^4.1.7: resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== -resolve-alpn@^1.2.0: +resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== @@ -10355,6 +11806,11 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-dependency-path@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-dependency-path/-/resolve-dependency-path-4.0.0.tgz#ec0b2aa83ce8cd125c7db734a40b4809959bf688" + integrity sha512-hlY1SybBGm5aYN3PC4rp15MzsJLM1w+MEA/4KU3UBPfz4S0lL3FL6mgv7JgaA8a+ZTeEQAiF1a1BuN2nkqiIlg== + resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" @@ -10392,7 +11848,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.7, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.4, resolve@^1.22.8: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.4, resolve@^1.22.8: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -10415,6 +11871,13 @@ response-iterator@^0.2.6: resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.6.tgz#249005fb14d2e4eeb478a3f735a28fd8b4c9f3da" integrity sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw== +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + responselike@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" @@ -10503,7 +11966,7 @@ rxjs@^6.6.3: dependencies: tslib "^1.9.0" -rxjs@^7.5.5: +rxjs@^7.5.1, rxjs@^7.5.5: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== @@ -10539,11 +12002,18 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sass-lookup@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/sass-lookup/-/sass-lookup-6.0.1.tgz#6f80a06d86b1d9590c49df425f542fdbb9f119cb" + integrity sha512-nl9Wxbj9RjEJA5SSV0hSDoU2zYGtE+ANaDS4OFUR7nYrquvBFvPKZZtQHe3lvnxCcylEDV00KUijjdMTUElcVQ== + dependencies: + commander "^12.0.0" + sax@>=0.6.0: version "1.3.0" resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" @@ -10589,7 +12059,7 @@ semver-diff@^4.0.0: dependencies: semver "^7.3.5" -semver@^5.6.0, semver@^5.7.2: +semver@^5.5.0, semver@^5.6.0, semver@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -10606,6 +12076,11 @@ semver@^7.1.3, semver@^7.2.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semve dependencies: lru-cache "^6.0.0" +semver@^7.3.2, semver@^7.6.0: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -10726,6 +12201,13 @@ sharp@^0.32.4: tar-fs "^3.0.4" tunnel-agent "^0.6.0" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -10733,11 +12215,25 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" @@ -10748,7 +12244,7 @@ side-channel@^1.0.4, side-channel@^1.0.6: get-intrinsic "^1.2.4" object-inspect "^1.13.1" -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -10758,6 +12254,11 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +simple-bin-help@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/simple-bin-help/-/simple-bin-help-1.8.0.tgz#21bb82c6bccd9fa8678f9c0fadf2956b54e2160a" + integrity sha512-0LxHn+P1lF5r2WwVB/za3hLRIsYoLaNq1CXqjbrs3ZvLuvlWnRKrUjEWzV7umZL7hpQ7xULiQMV+0iXdRa5iFg== + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -10802,11 +12303,20 @@ sisteransi@^1.0.5: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slash@^3.0.0: +slash@3.0.0, slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -10879,7 +12389,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.16, source-map-support@~0.5.20: +source-map-support@^0.5.16, source-map-support@^0.5.21, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -10909,6 +12419,18 @@ spawn-wrap@^2.0.0: signal-exit "^3.0.2" which "^2.0.1" +spec-change@^1.11.0: + version "1.11.3" + resolved "https://registry.yarnpkg.com/spec-change/-/spec-change-1.11.3.tgz#114aa966bbdcca235400c90d171aec3a416fa59d" + integrity sha512-IuJQw97WXU5avvJ2cdd7L2TrrzEBefCp2swWGrL3S2Qsr6UlM30nd8C4s65N05BcU1/3qcmzsZXw3VFuX66o6w== + dependencies: + arg "^5.0.2" + debug "^4.3.4" + deep-equal "^2.2.3" + dependency-tree "^11.0.0" + globby "^11.1.0" + lazy-ass "^2.0.3" + split-on-first@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" @@ -10931,6 +12453,21 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +sshpk@^1.14.1: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -11085,6 +12622,15 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-object@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" @@ -11116,6 +12662,11 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -11212,7 +12763,14 @@ stylelint@^16.2.0: table "^6.8.2" write-file-atomic "^5.0.1" -supports-color@8.1.1, supports-color@^8.0.0: +stylus-lookup@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/stylus-lookup/-/stylus-lookup-6.0.0.tgz#a15ea3abc399a0b72127e95422b2e7bb4fee86bb" + integrity sha512-RaWKxAvPnIXrdby+UWCr1WRfa+lrPMSJPySte4Q6a+rWyjeJyFOLJxr5GrAVfcMCsfVlCuzTAJ/ysYT8p8do7Q== + dependencies: + commander "^12.0.0" + +supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -11286,7 +12844,7 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.9, table@^6.8.2: +table@^6.0.9, table@^6.8.1, table@^6.8.2: version "6.8.2" resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== @@ -11400,7 +12958,12 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -through@2, through@^2.3.6, through@~2.3, through@~2.3.1: +throttleit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== + +through@2, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -11415,6 +12978,13 @@ tiny-warning@^1.0.0: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tmp-promise@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" + integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== + dependencies: + tmp "^0.2.0" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -11422,7 +12992,7 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.2.1: +tmp@^0.2.0, tmp@^0.2.1, tmp@~0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== @@ -11483,7 +13053,7 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-api-utils@^1.0.1: +ts-api-utils@^1.0.1, ts-api-utils@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== @@ -11506,6 +13076,11 @@ ts-loader@^9.4.1: semver "^7.3.4" source-map "^0.7.4" +ts-pattern@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ts-pattern/-/ts-pattern-4.3.0.tgz#7a995b39342f1b00d1507c2d2f3b90ea16e178a6" + integrity sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg== + tsconfig-paths@^3.14.1: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -11516,6 +13091,15 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" +tsconfig-paths@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -11533,6 +13117,16 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tsx@^4.7.1: + version "4.11.0" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.11.0.tgz#fdd8ce7ccaa0a84aed64c11e2fc5da314e1d8d14" + integrity sha512-vzGGELOgAupsNVssAmZjbUDfdm/pWP4R+Kg8TVdsonxbXk0bEpE1qh0yV6/QxUVXaVlNemgcPajGdJJ82n3stg== + dependencies: + esbuild "~0.20.2" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -11540,6 +13134,16 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -11641,7 +13245,7 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@5, typescript@^5.3.3: +typescript@5, typescript@^5.3.3, typescript@^5.4.4, typescript@^5.4.5: version "5.4.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== @@ -11666,6 +13270,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== + uncontrollable@^7.2.1: version "7.2.1" resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" @@ -11681,6 +13290,13 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici@^5.25.4: + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== + dependencies: + "@fastify/busboy" "^2.0.0" + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -11759,6 +13375,11 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + update-browserslist-db@^1.0.13: version "1.0.13" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" @@ -11885,6 +13506,15 @@ vary@^1, vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + void-elements@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" @@ -11919,7 +13549,7 @@ watchpack@^2.4.1: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -wcwidth@^1.0.1: +wcwidth@>=1.0.1, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== @@ -12109,7 +13739,7 @@ which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: gopd "^1.0.1" has-tostringtag "^1.0.2" -which@^1.2.1, which@^1.3.1: +which@^1.2.1, which@^1.2.10, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -12378,6 +14008,14 @@ yargs@^17.3.1: 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"