diff --git a/reports-scheduler/.classpath b/.classpath similarity index 100% rename from reports-scheduler/.classpath rename to .classpath diff --git a/reports-scheduler/.codecov.yml b/.codecov.yml similarity index 100% rename from reports-scheduler/.codecov.yml rename to .codecov.yml diff --git a/reports-scheduler/.editorconfig b/.editorconfig similarity index 100% rename from reports-scheduler/.editorconfig rename to .editorconfig diff --git a/.github/workflows/dashboards-reports-release-workflow.yml b/.github/workflows/dashboards-reports-release-workflow.yml deleted file mode 100644 index bceefb9d..00000000 --- a/.github/workflows/dashboards-reports-release-workflow.yml +++ /dev/null @@ -1,115 +0,0 @@ -name: Release OpenSearch Dashboards Reports Artifacts - -on: - push: - tags: - - "v*" - -env: - PLUGIN_NAME: reportsDashboards - ARTIFACT_NAME: reports-dashboards - OPENSEARCH_VERSION: '1.0' - OPENSEARCH_PLUGIN_VERSION: 1.0.0.0 - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-access-key-id: ${{ secrets.AWS_STAGING_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_STAGING_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - - - name: Checkout Plugin - uses: actions/checkout@v1 - - - name: Checkout OpenSearch Dashboards - uses: actions/checkout@v1 - with: - repository: opensearch-project/Opensearch-Dashboards - ref: ${{ env.OPENSEARCH_VERSION }} - path: dashboards-reports/OpenSearch-Dashboards - - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: "10.24.1" - - - name: Move Dashboards Reports to Plugins Dir - run: mv dashboards-reports OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} - - - name: Add Chromium Binary to Reporting for Testing - run: | - sudo apt install -y libnss3-dev fonts-liberation libfontconfig1 - cd OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} - wget https://github.com/opendistro-for-elasticsearch/kibana-reports/releases/download/chromium-1.12.0.0/chromium-linux-x64.zip - unzip chromium-linux-x64.zip - rm chromium-linux-x64.zip - - - name: OpenSearch Dashboards Plugin Bootstrap - uses: nick-invision/retry@v1 - with: - timeout_minutes: 30 - max_attempts: 3 - command: cd OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}; yarn osd bootstrap - - - name: Test - uses: nick-invision/retry@v1 - with: - timeout_minutes: 30 - max_attempts: 3 - command: cd OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}; yarn test - - - name: Build Artifact and upload to S3 - run: | - cd OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} - yarn build - - cd build - mkdir -p ./{linux-x64,linux-arm64,windows-x64}/OpenSearch-Dashboards/${{ env.PLUGIN_NAME }} - cp ./${{ env.PLUGIN_NAME }}-*.zip ./linux-x64/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}-linux-x64.zip - cp ./${{ env.PLUGIN_NAME }}-*.zip ./linux-arm64/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}-linux-arm64.zip - mv ./${{ env.PLUGIN_NAME }}-*.zip ./windows-x64/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}-windows-x64.zip - - s3_prefix="s3://staging.artifacts.opendistroforelasticsearch.amazon.com/snapshots/kibana-plugins/reports/" - - cd linux-x64 - wget https://github.com/opensearch-project/dashboards-reports/releases/download/chromium-1.12.0.0/chromium-linux-x64.zip - unzip chromium-linux-x64.zip -d ./OpenSearch-Dashboards/${{ env.PLUGIN_NAME }} - rm chromium-linux-x64.zip - zip -ur ./${{ env.ARTIFACT_NAME }}-*.zip ./OpenSearch-Dashboards - linux_x64_artifact=`ls ./${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}-linux-x64.zip` - - #Inject build number before the suffix and upload to S3 - linux_x64_artifact_outfile=`basename ${linux_x64_artifact%.zip}-build-${GITHUB_RUN_NUMBER}.zip` - echo "Copying $linux_x64_artifact to ${s3_prefix}${linux_x64_artifact_outfile}" - aws s3 cp --quiet $linux_x64_artifact ${s3_prefix}${linux_x64_artifact_outfile} - cd .. - - cd linux-arm64 - wget https://github.com/opensearch-project/dashboards-reports/releases/download/chromium-1.12.0.0/chromium-linux-arm64.zip - unzip chromium-linux-arm64.zip -d ./OpenSearch-Dashboards/${{ env.PLUGIN_NAME }} - rm chromium-linux-arm64.zip - zip -ur ./${{ env.ARTIFACT_NAME }}-*.zip ./OpenSearch-Dashboards - linux_arm64_artifact=`ls ./${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}-linux-arm64.zip` - - #Inject build number before the suffix and upload to S3 - linux_arm64_artifact_outfile=`basename ${linux_arm64_artifact%.zip}-build-${GITHUB_RUN_NUMBER}.zip` - echo "Copying $linux_arm64_artifact to ${s3_prefix}${linux_arm64_artifact_outfile}" - aws s3 cp --quiet $linux_arm64_artifact ${s3_prefix}${linux_arm64_artifact_outfile} - cd .. - - cd windows-x64 - wget https://github.com/opensearch-project/dashboards-reports/releases/download/chromium-1.12.0.0/chromium-windows-x64.zip - unzip chromium-windows-x64.zip -d ./OpenSearch-Dashboards/${{ env.PLUGIN_NAME }} - rm chromium-windows-x64.zip - zip -ur ./${{ env.ARTIFACT_NAME }}-*.zip ./OpenSearch-Dashboards - windows_x64_artifact=`ls ./${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}-windows-x64.zip` - - #Inject build number before the suffix and upload to S3 - windows_x64_artifact_outfile=`basename ${windows_x64_artifact%.zip}-build-${GITHUB_RUN_NUMBER}.zip` - echo "Copying $windows_x64_artifact to ${s3_prefix}${windows_x64_artifact_outfile}" - aws s3 cp --quiet $windows_x64_artifact ${s3_prefix}${windows_x64_artifact_outfile} diff --git a/.github/workflows/dashboards-reports-test-and-build-workflow.yml b/.github/workflows/dashboards-reports-test-and-build-workflow.yml deleted file mode 100644 index 08348aec..00000000 --- a/.github/workflows/dashboards-reports-test-and-build-workflow.yml +++ /dev/null @@ -1,184 +0,0 @@ -name: Test and Build OpenSearch Dashboards Reports - -on: [pull_request, push] - -env: - PLUGIN_NAME: reportsDashboards - ARTIFACT_NAME: reports-dashboards - OPENSEARCH_VERSION: 'main' - OPENSEARCH_PLUGIN_VERSION: 2.5.0.0 - - -jobs: - linux-build: - runs-on: ubuntu-latest - steps: - - name: Checkout Plugin - uses: actions/checkout@v1 - - - name: Checkout OpenSearch Dashboards - uses: actions/checkout@v1 - with: - repository: opensearch-project/Opensearch-Dashboards - ref: ${{ env.OPENSEARCH_VERSION }} - path: OpenSearch-Dashboards - - - name: Get node version - id: versions_step - run: - echo "::set-output name=node_version::$(node -p "(require('../OpenSearch-Dashboards/package.json').engines.node).match(/[.0-9]+/)[0]")" - - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: ${{ steps.versions_step.outputs.node_version }} - registry-url: 'https://registry.npmjs.org' - - - - name: Move Dashboards Reports to Plugins Dir - run: mv dashboards-reports ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} - - - name: OpenSearch Dashboards Plugin Bootstrap - uses: nick-invision/retry@v1 - with: - timeout_minutes: 30 - max_attempts: 3 - command: cd ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}; yarn osd bootstrap - - - name: Test - uses: nick-invision/retry@v1 - with: - timeout_minutes: 30 - max_attempts: 3 - command: cd ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}; yarn test --coverage - - - name: Upload coverage - uses: codecov/codecov-action@v1 - with: - flags: dashboards-reports - directory: ../OpenSearch-Dashboards/plugins/ - token: ${{ secrets.CODECOV_TOKEN }} - - - name: Build Artifact - run: | - cd ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} - yarn build - mv ./build/*.zip ./build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip - - - name: Upload Artifact For Linux x64 - uses: actions/upload-artifact@v1 - with: - name: dashboards-reports-linux-x64 - path: ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}/build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip - - windows-build: - runs-on: windows-latest - steps: - - name: Checkout Plugin - uses: actions/checkout@v1 - - # Enable longer filenames for windows - - name: Enable longer filenames - run: git config --system core.longpaths true - - - name: Checkout OpenSearch Dashboards - uses: actions/checkout@v1 - with: - repository: opensearch-project/Opensearch-Dashboards - ref: ${{ env.OPENSEARCH_VERSION }} - path: OpenSearch-Dashboards - - - name: Get node version - id: versions_step - run: - echo "::set-output name=node_version::$(node -p "(require('../OpenSearch-Dashboards/package.json').engines.node).match(/[.0-9]+/)[0]")" - - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: ${{ steps.versions_step.outputs.node_version }} - registry-url: 'https://registry.npmjs.org' - - - - name: Move Dashboards Reports to Plugins Dir - run: mv dashboards-reports ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} - - - name: OpenSearch Dashboards Plugin Bootstrap - uses: nick-invision/retry@v1 - with: - timeout_minutes: 30 - max_attempts: 3 - command: cd ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} && yarn osd bootstrap - - - name: Test - uses: nick-invision/retry@v1 - with: - timeout_minutes: 30 - max_attempts: 3 - command: cd ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} && yarn test - - - name: Build Artifact - run: | - cd ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} - yarn build - mv ./build/*.zip ./build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip - - - name: Upload Artifact For Windows - uses: actions/upload-artifact@v1 - with: - name: dashboards-reports-windows-x64 - path: ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}/build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip - - macos-build: - runs-on: macos-latest - steps: - - name: Checkout Plugin - uses: actions/checkout@v1 - - - name: Checkout OpenSearch Dashboards - uses: actions/checkout@v1 - with: - repository: opensearch-project/Opensearch-Dashboards - ref: ${{ env.OPENSEARCH_VERSION }} - path: OpenSearch-Dashboards - - - name: Get node version - id: versions_step - run: - echo "::set-output name=node_version::$(node -p "(require('../OpenSearch-Dashboards/package.json').engines.node).match(/[.0-9]+/)[0]")" - - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: ${{ steps.versions_step.outputs.node_version }} - registry-url: 'https://registry.npmjs.org' - - - - name: Move Dashboards Reports to Plugins Dir - run: mv dashboards-reports ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} - - - name: OpenSearch Dashboards Plugin Bootstrap - uses: nick-invision/retry@v1 - with: - timeout_minutes: 30 - max_attempts: 3 - command: cd ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}; yarn osd bootstrap - - - name: Test - uses: nick-invision/retry@v1 - with: - timeout_minutes: 30 - max_attempts: 3 - command: cd ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}; yarn test - - - name: Build Artifact - run: | - cd ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} - yarn build - mv ./build/*.zip ./build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip - - - name: Upload Artifact For MacOS x64 - uses: actions/upload-artifact@v1 - with: - name: dashboards-reports-macosx-x64 - path: ../OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}/build/${{ env.ARTIFACT_NAME }}-${{ env.OPENSEARCH_PLUGIN_VERSION }}.zip diff --git a/.github/workflows/reports-scheduler-test-and-build-workflow.yml b/.github/workflows/reports-scheduler-test-and-build-workflow.yml index fc2d9780..0e3f6b12 100644 --- a/.github/workflows/reports-scheduler-test-and-build-workflow.yml +++ b/.github/workflows/reports-scheduler-test-and-build-workflow.yml @@ -17,13 +17,11 @@ jobs: with: java-version: ${{ matrix.java }} - # reports-scheduler - name: Checkout Reports Scheduler uses: actions/checkout@v2 - name: Build with Gradle run: | - cd reports-scheduler ./gradlew build - name: Upload coverage @@ -36,7 +34,7 @@ jobs: - name: Create Artifact Path run: | mkdir -p reports-scheduler-builds - cp -r ./reports-scheduler/build/distributions/*.zip reports-scheduler-builds/ + cp -r ./build/distributions/*.zip reports-scheduler-builds/ - name: Upload Artifacts uses: actions/upload-artifact@v1 @@ -58,26 +56,17 @@ jobs: with: java-version: ${{ matrix.java }} - # reports-scheduler - name: Checkout Reports Scheduler uses: actions/checkout@v2 - # Disable bwc tests since first release - # - name: RunBackwards Compatibility Tests - # run: | - # cd reports-scheduler - # echo "Running backwards compatibility tests ..." - # ./gradlew.bat bwcTestSuite - - name: Build with Gradle run: | - cd reports-scheduler ./gradlew.bat build -x integTest -x jacocoTestReport - name: Create Artifact Path run: | mkdir -p reports-scheduler-builds - cp -r ./reports-scheduler/build/distributions/*.zip reports-scheduler-builds/ + cp -r ./build/distributions/*.zip reports-scheduler-builds/ - name: Upload Artifacts uses: actions/upload-artifact@v1 @@ -103,22 +92,14 @@ jobs: - name: Checkout Reports Scheduler uses: actions/checkout@v2 - # Disable bwc tests since first release - # - name: RunBackwards Compatibility Tests - # run: | - # cd reports-scheduler - # echo "Running backwards compatibility tests ..." - # ./gradlew bwcTestSuite - - name: Build with Gradle run: | - cd reports-scheduler ./gradlew build -x integTest -x jacocoTestReport - name: Create Artifact Path run: | mkdir -p reports-scheduler-builds - cp -r ./reports-scheduler/build/distributions/*.zip reports-scheduler-builds/ + cp -r ./build/distributions/*.zip reports-scheduler-builds/ - name: Upload Artifacts uses: actions/upload-artifact@v1 diff --git a/.gitignore b/.gitignore index 77852916..8c03270c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,19 +3,313 @@ *.iml .gradle out -local-test -.local-* - -npm-debug.log* -node_modules /build/ /public/app.css -.idea/ -.vscode/ -yarn-error.log /coverage/ .history/ .eslintcache # Kibana -.empty \ No newline at end of file +.empty + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### Kotlin ### +# Compiled class file + +# Log file + +# BlueJ files + +# Mobile Tools for Java (J2ME) + +# Package Files # + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml + +### Gradle ### +.gradle +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +### Gradle Patch ### +**/build/ + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +.idea/artifacts +.idea/compiler.xml +.idea/jarRepositories.xml +.idea/modules.xml +.idea/*.iml +.idea/modules +*.iml +*.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# AWS plugin +.idea/aws.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + + +### Eclipse ### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project + +### Eclipse Patch ### +# Spring Boot Tooling +.sts4-cache/ + +local-test +.local-* + +/artifacts/ diff --git a/reports-scheduler/.idea/.name b/.idea/.name similarity index 100% rename from reports-scheduler/.idea/.name rename to .idea/.name diff --git a/reports-scheduler/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml similarity index 100% rename from reports-scheduler/.idea/codeStyles/Project.xml rename to .idea/codeStyles/Project.xml diff --git a/reports-scheduler/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml similarity index 100% rename from reports-scheduler/.idea/codeStyles/codeStyleConfig.xml rename to .idea/codeStyles/codeStyleConfig.xml diff --git a/reports-scheduler/.idea/kotlinc.xml b/.idea/kotlinc.xml similarity index 100% rename from reports-scheduler/.idea/kotlinc.xml rename to .idea/kotlinc.xml diff --git a/reports-scheduler/.idea/misc.xml b/.idea/misc.xml similarity index 100% rename from reports-scheduler/.idea/misc.xml rename to .idea/misc.xml diff --git a/reports-scheduler/.idea/vcs.xml b/.idea/vcs.xml similarity index 100% rename from reports-scheduler/.idea/vcs.xml rename to .idea/vcs.xml diff --git a/reports-scheduler/.project b/.project similarity index 100% rename from reports-scheduler/.project rename to .project diff --git a/README.md b/README.md index b79cff8c..2354c0bb 100644 --- a/README.md +++ b/README.md @@ -26,13 +26,6 @@ OpenSearch Dashboards Reports allows ‘Report Owner’ (engineers, including bu | Distribution build tests | [![OpenSearch IT tests][reports-scheduler-it-badge]][reports-scheduler-it-link] [![OpenSearch IT code][reports-scheduler-it-code-badge]][reports-scheduler-it-code-link] | | Backward compatibility tests | [![BWC tests][bwc-tests-badge]][bwc-tests-link] | -### Dashboard-Reports - -| | | -| ------------------------ | ------------------------------------------------------------------------------------------------------------------ | -| Test and build | [![Observability Dashboards CI][dashboard-reports-build-badge]][dashboard-reports-build-link] | -| Code coverage | [![codecov][dashboard-reports-codecov-badge]][codecov-link] | -| Distribution build tests | [![cypress tests][cypress-test-badge]][cypress-test-link] [![cypress code][cypress-code-badge]][cypress-code-link] | ### Repository Checks @@ -56,11 +49,8 @@ OpenSearch Dashboards Reports allows ‘Report Owner’ (engineers, including bu [dco-badge-link]: https://github.com/opensearch-project/dashboards-reports/actions/workflows/dco.yml [link-check-badge]: https://github.com/opensearch-project/dashboards-reports/actions/workflows/link-checker.yml/badge.svg [link-check-link]: https://github.com/opensearch-project/dashboards-reports/actions/workflows/link-checker.yml -[dashboard-reports-build-badge]: https://github.com/opensearch-project/dashboards-reports/actions/workflows/dashboards-reports-test-and-build-workflow.yml/badge.svg -[dashboard-reports-build-link]: https://github.com/opensearch-project/dashboards-reports/actions/workflows/dashboards-reports-test-and-build-workflow.yml [reports-scheduler-build-badge]: https://github.com/opensearch-project/dashboards-reports/actions/workflows/reports-scheduler-test-and-build-workflow.yml/badge.svg [reports-scheduler-build-link]: https://github.com/opensearch-project/dashboards-reports/actions/workflows/reports-scheduler-test-and-build-workflow.yml -[dashboard-reports-codecov-badge]: https://codecov.io/gh/opensearch-project/dashboards-reports/branch/main/graphs/badge.svg?flag=dashboards-reports [reports-scheduler-codecov-badge]: https://codecov.io/gh/opensearch-project/dashboards-reports/branch/main/graphs/badge.svg?flag=reports-scheduler [codecov-link]: https://codecov.io/gh/opensearch-project/dashboards-reports [cypress-test-badge]: https://img.shields.io/badge/Cypress%20tests-in%20progress-yellow @@ -94,13 +84,6 @@ Please see our technical [documentation](https://opensearch.org/docs/dashboards/ We welcome you to get involved in development, documentation, testing the OpenSearch Dashboards reports plugin. See our [CONTRIBUTING.md](./CONTRIBUTING.md) and join in. -## Setup & Build - -Complete OpenSearch Dashboards Report feature is composed of 2 plugins. - -- [OpenSearch Dashboards reports plugin](./dashboards-reports/README.md) -- OpenSearch Reports scheduler plugin - ## Notifications Integration OpenSearch Dashboards Reports integration with [Notifications](https://github.com/opensearch-project/notifications) is currently in progress. Tracking [here](https://github.com/opensearch-project/dashboards-reports/issues/72) diff --git a/reports-scheduler/build-tools/esplugin-coverage.gradle b/build-tools/esplugin-coverage.gradle similarity index 100% rename from reports-scheduler/build-tools/esplugin-coverage.gradle rename to build-tools/esplugin-coverage.gradle diff --git a/reports-scheduler/build-tools/pkgbuild.gradle b/build-tools/pkgbuild.gradle similarity index 100% rename from reports-scheduler/build-tools/pkgbuild.gradle rename to build-tools/pkgbuild.gradle diff --git a/reports-scheduler/build.gradle b/build.gradle similarity index 100% rename from reports-scheduler/build.gradle rename to build.gradle diff --git a/reports-scheduler/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml similarity index 100% rename from reports-scheduler/config/checkstyle/checkstyle.xml rename to config/checkstyle/checkstyle.xml diff --git a/reports-scheduler/config/checkstyle/google_checks.xml b/config/checkstyle/google_checks.xml similarity index 100% rename from reports-scheduler/config/checkstyle/google_checks.xml rename to config/checkstyle/google_checks.xml diff --git a/reports-scheduler/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml similarity index 100% rename from reports-scheduler/config/checkstyle/suppressions.xml rename to config/checkstyle/suppressions.xml diff --git a/dashboards-reports/.cypress/integration/01-create.spec.ts b/dashboards-reports/.cypress/integration/01-create.spec.ts deleted file mode 100644 index d047aeff..00000000 --- a/dashboards-reports/.cypress/integration/01-create.spec.ts +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { visitReportingLandingPage } from "../support/utils"; - -describe('Adding sample data', () => { - it('Adds sample data', () => { - cy.visit(`${Cypress.env('opensearchDashboards')}/app/home#/tutorial_directory/sampleData`); - cy.get('div[data-test-subj="sampleDataSetCardflights"]').contains(/(Add|View) data/).click(); - cy.wait(3000); - cy.visit(`${Cypress.env('opensearchDashboards')}/app/home#/tutorial_directory/sampleData`); - cy.get('div[data-test-subj="sampleDataSetCardecommerce"]').contains(/(Add|View) data/).click(); - cy.wait(3000); - cy.visit(`${Cypress.env('opensearchDashboards')}/app/home#/tutorial_directory/sampleData`); - cy.get('div[data-test-subj="sampleDataSetCardlogs"]').contains(/(Add|View) data/).click(); - cy.wait(3000); - }); -}); - -describe('Cypress', () => { - it('Visits Reporting homepage', () => { - visitReportingLandingPage(); - }); - - it('Visit Create page', () => { - visitCreateReportDefinitionPage(); - }); - - it('Create a new on-demand dashboard report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress dashboard on-demand report'); - setReportDefinitionDescription('Description for cypress test'); - selectReportSourceComboBox(); - - // // select drop-down option in report source list - cy.contains('[Logs] Web Traffic').click(); - - cy.wait(500); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a new on-demand visualization report definition', ()=> { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress vis on-demand report'); - setReportDefinitionDescription('Description for cypress test'); - selectReportSource('#visualizationReportSource'); - selectReportSourceComboBox(); - cy.wait(500); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a new on-demand saved search report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress saved search on-demand report'); - setReportDefinitionDescription('Description for cypress test'); - selectReportSource('#savedSearchReportSource'); - selectReportSourceComboBox(); - cy.wait(500); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a new dashboard daily recurring report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress dashboard daily scheduled report'); - setReportDefinitionDescription('Description for cypress test'); - selectReportSourceComboBox(); - - // select drop-down option in report source list - cy.contains('[Logs] Web Traffic').click(); - - cy.wait(500); - setReportTriggerToSchedule(); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a new visualization daily recurring report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress vis daily scheduled report'); - setReportDefinitionDescription('Description for cypress test'); - selectReportSource('#visualizationReportSource'); - selectReportSourceComboBox(); - cy.wait(500); - setReportTriggerToSchedule(); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a new saved search daily recurring report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress search daily scheduled report'); - setReportDefinitionDescription('Description for cypress test'); - selectReportSource('#savedSearchReportSource'); - selectReportSourceComboBox(); - setReportTriggerToSchedule(); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a new dashboard interval recurring report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress dashboard recurring report'); - setReportDefinitionDescription('Description for cypress test'); - selectReportSourceComboBox(); - - // select drop-down option in report source list - cy.contains('[Logs] Web Traffic').click(); - - cy.wait(500); - setReportTriggerToSchedule(); - selectIntervalScheduleFrequency(); - inputTextIntoField('#recurringByIntervalNumber', '5'); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a new visualization interval recurring report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress vis interval recurring report'); - selectReportSource('#visualizationReportSource'); - selectReportSourceComboBox(); - setReportTriggerToSchedule(); - selectIntervalScheduleFrequency(); - inputTextIntoField('#recurringByIntervalNumber', '5'); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a new saved search interval recurring report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress saved search interval recurring report'); - selectReportSource('#savedSearchReportSource'); - selectReportSourceComboBox(); - setReportTriggerToSchedule(); - selectIntervalScheduleFrequency(); - inputTextIntoField('#recurringByIntervalNumber', '5'); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a dashboard cron-based report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress dashboard cron definition'); - selectReportSourceComboBox(); - - // select drop-down option in report source list - cy.contains('[Logs] Web Traffic').click(); - cy.wait(500); - setReportTriggerToSchedule(); - selectCronBasedRequestTime(); - inputTextIntoField('#cronExpressionFieldText', '0 12 * * *'); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a visualization cron-based report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress vis cron definition'); - selectReportSource('#visualizationReportSource'); - selectReportSourceComboBox(); - setReportTriggerToSchedule(); - selectCronBasedRequestTime(); - inputTextIntoField('#cronExpressionFieldText', '0 12 * * *'); - cy.wait(500); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); - - it('Create a saved search cron-based report definition', () => { - visitCreateReportDefinitionPage(); - setReportDefinitionName('Cypress search cron definition'); - selectReportSource('#savedSearchReportSource'); - selectReportSourceComboBox(); - setReportTriggerToSchedule(); - selectCronBasedRequestTime(); - inputTextIntoField('#cronExpressionFieldText', '0 12 * * *'); - cy.wait(500); - clickCreateReportDefinitionButton(); - cy.wait(3000); - verifyOnReportingLandingPage(); - }); -}); - -function visitCreateReportDefinitionPage() { - cy.visit(`${Cypress.env('opensearchDashboards')}/app/reports-dashboards#/`); - cy.location('pathname', { timeout: 60000 }).should( - 'include', - '/reports-dashboards' - ); - cy.wait(3000); - cy.get('#createReportHomepageButton').click(); -} - -function setReportDefinitionName(name: string) { - cy.get('#reportSettingsName').type(name); -} - -function setReportDefinitionDescription(description: string) { - cy.get('#reportSettingsDescription').type(description); -} - -function selectReportSource(name: string) { - cy.get(name).click({force: true}); -} - -function selectReportSourceComboBox() { - cy.get('[data-test-subj="comboBoxInput"]').eq(0).click({ force: true }); -} - -function setReportTriggerToSchedule() { - cy.get('#Schedule').check({ force: true }); -} - -function selectIntervalScheduleFrequency() { - cy.get('#recurringFrequencySelect').select('By interval'); -} - -function selectCronBasedRequestTime() { - cy.contains('Cron based').click({ force: true }); -} - -function inputTextIntoField(selector: string, text: string) { - cy.get(selector).type(text); -} - -function clickCreateReportDefinitionButton() { - cy.get('#createNewReportDefinition').click({ force: true }); -} - -function verifyOnReportingLandingPage() { - cy.get('#reportDefinitionDetailsLink').should('exist'); -} \ No newline at end of file diff --git a/dashboards-reports/.cypress/integration/02-edit.spec.ts b/dashboards-reports/.cypress/integration/02-edit.spec.ts deleted file mode 100644 index a87e77d4..00000000 --- a/dashboards-reports/.cypress/integration/02-edit.spec.ts +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -describe('Cypress', () => { - it('Visit edit page, update name and description', () => { - cy.visit(`${Cypress.env('opensearchDashboards')}/app/reports-dashboards#/`); - cy.location('pathname', { timeout: 60000 }).should( - 'include', - '/reports-dashboards' - ); - - cy.wait(12500); - - cy.get('#reportDefinitionDetailsLink').first().click(); - - cy.get('#editReportDefinitionButton').should('exist'); - - cy.get('#editReportDefinitionButton').click(); - - cy.url().should('include', 'edit'); - - cy.wait(1000); - - // update the report name - cy.get('#reportSettingsName').type(' update name'); - - // update report description - cy.get('#reportSettingsDescription').type(' update description'); - - cy.get('#editReportDefinitionButton').click({ force: true }); - - cy.wait(12500); - - // check that re-direct to home page - cy.get('#reportDefinitionDetailsLink').should('exist'); - }); - - it('Visit edit page, change report trigger', () => { - cy.visit(`${Cypress.env('opensearchDashboards')}/app/reports-dashboards#/`); - cy.location('pathname', { timeout: 60000 }).should( - 'include', - '/reports-dashboards' - ); - - cy.wait(12500); - - cy.get('#reportDefinitionDetailsLink').first().click(); - - cy.get('#editReportDefinitionButton').should('exist'); - - cy.get('#editReportDefinitionButton').click(); - - cy.url().should('include', 'edit'); - - cy.wait(1000); - cy.get('#reportDefinitionTriggerTypes > div:nth-child(2)').click({ force: true }); - - cy.get('#Schedule').check({ force: true }); - cy.get('#editReportDefinitionButton').click({ force: true }); - - cy.wait(12500); - - // check that re-direct to home page - cy.get('#reportDefinitionDetailsLink').should('exist'); - }); - - it('Visit edit page, change report trigger back', () => { - cy.visit(`${Cypress.env('opensearchDashboards')}/app/reports-dashboards#/`); - cy.location('pathname', { timeout: 60000 }).should( - 'include', - '/reports-dashboards' - ); - - cy.wait(12500); - - cy.get('#reportDefinitionDetailsLink').first().click(); - - cy.get('#editReportDefinitionButton').should('exist'); - - cy.get('#editReportDefinitionButton').click(); - - cy.url().should('include', 'edit'); - - cy.wait(1000); - - cy.get('#reportDefinitionTriggerTypes > div:nth-child(1)').click({ force: true }); - - cy.get('#editReportDefinitionButton').click({ force: true }); - - cy.wait(12500); - - // check that re-direct to home page - cy.get('#reportDefinitionDetailsLink').should('exist'); - }); -}); diff --git a/dashboards-reports/.cypress/integration/03-details.spec.ts b/dashboards-reports/.cypress/integration/03-details.spec.ts deleted file mode 100644 index 166da435..00000000 --- a/dashboards-reports/.cypress/integration/03-details.spec.ts +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { visitReportingLandingPage } from "../support/utils"; - -describe('Cypress', () => { - it('Visit report definition details page', () => { - visitReportingLandingPage(); - cy.wait(5000); - visitReportDefinitionDetailsPage(); - verifyReportDefinitionDetailsURL(); - verifyDeleteDefinitionButtonExists(); - verifyGenerateReportFromFileFormatExists(); - }); - - it('Go to edit report definition from report definition details', () => { - visitReportingLandingPage(); - cy.wait(5000); - visitReportDefinitionDetailsPage(); - verifyEditDefinitionButtonExists(); - clickEditReportDefinitionButton(); - verifyEditReportDefinitionURL(); - }); - - it('Verify report source URL on report definition details', () => { - visitReportingLandingPage(); - cy.wait(5000); - visitReportDefinitionDetailsPage(); - verifyReportDefinitionSourceURLExists(); - - }); - - it('Delete report definition from details page', () => { - visitReportingLandingPage(); - cy.wait(5000); - visitReportDefinitionDetailsPage(); - verifyDeleteDefinitionButtonExists(); - deleteReportDefinition(); - verifyDeleteSuccess(); - }); - - it('Visit report details page', () => { - visitReportingLandingPage(); - cy.wait(5000); - visitReportDetailsPage(); - verifyReportDetailsURL(); - }); - - it('Verify report source URL on report details', () => { - visitReportingLandingPage(); - cy.wait(5000); - visitReportDetailsPage(); - verifyReportDetailsSourceURLExists(); - }); -}); - -function visitReportDefinitionDetailsPage() { - cy.get('#reportDefinitionDetailsLink').first().click(); -} - -function verifyReportDefinitionDetailsURL() { - cy.url().should('include', 'report_definition_details'); -} - -function verifyDeleteDefinitionButtonExists() { - cy.get('#deleteReportDefinitionButton').should('exist'); -} - -function verifyEditDefinitionButtonExists() { - cy.get('#editReportDefinitionButton').should('exist'); -} - -function clickEditReportDefinitionButton() { - cy.get('#editReportDefinitionButton').click({ force: true }); -} - -function verifyEditReportDefinitionURL() { - cy.url().should('include', 'edit'); -} - -function verifyReportDefinitionSourceURLExists() { - cy.get('#reportDefinitionSourceURL').should('exist'); -} - -function verifyReportDetailsSourceURLExists() { - cy.get('#reportDetailsSourceURL').should('exist'); -} - -function verifyGenerateReportFromFileFormatExists() { - cy.get('#generateReportFromDetailsFileFormat').should('exist'); -} - -function deleteReportDefinition() { - cy.get('#deleteReportDefinitionButton').click(); - cy.wait(500); - cy.get('button.euiButton:nth-child(2)').click({ force: true }); -} - -function verifyDeleteSuccess() { - cy.get('#deleteReportDefinitionSuccessToast').should('exist'); -} - -function visitReportDetailsPage() { - cy.get('#reportDetailsLink').first().click(); -} - -function verifyReportDetailsURL() { - cy.url().should('include', 'report_details'); -} diff --git a/dashboards-reports/.cypress/integration/04-download.spec.ts b/dashboards-reports/.cypress/integration/04-download.spec.ts deleted file mode 100644 index af7e6409..00000000 --- a/dashboards-reports/.cypress/integration/04-download.spec.ts +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -describe('Cypress', () => { - it('Download from reporting homepage', () => { - cy.visit(`${Cypress.env('opensearchDashboards')}/app/reports-dashboards#/`); - cy.location('pathname', { timeout: 60000 }).should( - 'include', - '/reports-dashboards' - ); - - cy.wait(12500); - cy.get('#landingPageOnDemandDownload').click({ force: true }); - cy.get('body').then($body => { - if ($body.find('#downloadInProgressLoadingModal').length > 0) { - return; - } - else { - assert(false); - } - }) - }); - - it('Download pdf from in-context menu', () => { - cy.visit(`${Cypress.env('opensearchDashboards')}/app/dashboards#`); - cy.wait(5000); - - // click first entry in dashboards page - cy.get('tr.euiTableRow:nth-child(1) > td:nth-child(2) > div:nth-child(2) > a:nth-child(1)').click({ force: true }); - - // click Reporting in-context menu - cy.get('#downloadReport > span:nth-child(1) > span:nth-child(1)').click({ force: true }); - - // download PDF - cy.get('#generatePDF > span:nth-child(1) > span:nth-child(2)').click({ force: true }); - - cy.get('#reportGenerationProgressModal'); - }); - - it('Download png from in-context menu', () => { - cy.visit(`${Cypress.env('opensearchDashboards')}/app/dashboards#`); - cy.wait(5000); - - // click first entry in dashboards page - cy.get('tr.euiTableRow:nth-child(1) > td:nth-child(2) > div:nth-child(2) > a:nth-child(1)').click({ force: true }); - - // click Reporting in-context menu - cy.get('#downloadReport > span:nth-child(1) > span:nth-child(1)').click({ force: true }); - - cy.get('#generatePNG').click({ force: true }); - - cy.get('#reportGenerationProgressModal'); - }); - - it('Download csv from saved search in-context menu', () => { - cy.visit(`${Cypress.env('opensearchDashboards')}/app/discover#`); - cy.wait(5000); - - // open saved search list - cy.get('button.euiButtonEmpty:nth-child(3) > span:nth-child(1) > span:nth-child(1)').click({ force: true }); - cy.wait(5000); - - // click first entry - cy.get('li.euiListGroupItem:nth-child(1) > button:nth-child(1)').click({ force: true }); - - // open reporting menu - cy.get('#downloadReport').click({ force: true }); - - cy.get('#generateCSV').click({ force: true }); - }); - - it('Download from Report definition details page', () => { - // create an on-demand report definition - - cy.visit(`${Cypress.env('opensearchDashboards')}/app/reports-dashboards#/`); - cy.location('pathname', { timeout: 60000 }).should( - 'include', - '/reports-dashboards' - ); - cy.wait(10000); - - cy.get('tr.euiTableRow-isSelectable:nth-child(1) > td:nth-child(1) > div:nth-child(2) > button:nth-child(1)').first().click(); - - cy.url().should('include', 'report_definition_details'); - - cy.get('#generateReportFromDetailsButton').should('exist'); - - cy.get('#generateReportFromDetailsButton').click({ force: true }); - - cy.get('#downloadInProgressLoadingModal'); - }); -}); diff --git a/dashboards-reports/.cypress/plugins/index.js b/dashboards-reports/.cypress/plugins/index.js deleted file mode 100644 index 8ac1f106..00000000 --- a/dashboards-reports/.cypress/plugins/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -/// -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) - -/** - * @type {Cypress.PluginConfig} - */ -module.exports = (on, config) => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config -} diff --git a/dashboards-reports/.cypress/support/commands.js b/dashboards-reports/.cypress/support/commands.js deleted file mode 100644 index dab9071d..00000000 --- a/dashboards-reports/.cypress/support/commands.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const { ADMIN_AUTH } = require('./constants'); - -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add("login", (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) - -Cypress.Commands.overwrite('visit', (originalFn, url, options) => { - // Add the basic auth header when security enabled in the OpenSearch cluster - // https://github.com/cypress-io/cypress/issues/1288 - if (Cypress.env('security_enabled')) { - if (options) { - options.auth = ADMIN_AUTH; - } else { - options = { auth: ADMIN_AUTH }; - } - // Add query parameters - select the default OpenSearch Dashboards tenant - options.qs = { security_tenant: 'private' }; - return originalFn(url, options); - } else { - return originalFn(url, options); - } -}); - -// Be able to add default options to cy.request(), https://github.com/cypress-io/cypress/issues/726 -Cypress.Commands.overwrite('request', (originalFn, ...args) => { - let defaults = {}; - // Add the basic authentication header when security enabled in the OpenSearch cluster - if (Cypress.env('security_enabled')) { - defaults.auth = ADMIN_AUTH; - } - - let options = {}; - if (typeof args[0] === 'object' && args[0] !== null) { - options = Object.assign({}, args[0]); - } else if (args.length === 1) { - [options.url] = args; - } else if (args.length === 2) { - [options.method, options.url] = args; - } else if (args.length === 3) { - [options.method, options.url, options.body] = args; - } - - return originalFn(Object.assign({}, defaults, options)); -}); - diff --git a/dashboards-reports/.cypress/support/constants.js b/dashboards-reports/.cypress/support/constants.js deleted file mode 100644 index 1001fd49..00000000 --- a/dashboards-reports/.cypress/support/constants.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const ADMIN_AUTH = { - username: 'admin', - password: 'admin', -}; diff --git a/dashboards-reports/.cypress/support/index.js b/dashboards-reports/.cypress/support/index.js deleted file mode 100644 index c70c2dd5..00000000 --- a/dashboards-reports/.cypress/support/index.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// *********************************************************** -// This example support/index.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands' - -// Alternatively you can use CommonJS syntax: -// require('./commands') - -// Switch the base URL of OpenSearch when security enabled in the cluster -if (Cypress.env('security_enabled')) { - Cypress.env('opensearch', 'https://localhost:9200'); -} diff --git a/dashboards-reports/.cypress/support/utils.js b/dashboards-reports/.cypress/support/utils.js deleted file mode 100644 index a534be13..00000000 --- a/dashboards-reports/.cypress/support/utils.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export function visitReportingLandingPage() { - cy.visit(`${Cypress.env('opensearchDashboards')}/app/reports-dashboards#/`); - cy.location('pathname', { timeout: 60000 }).should( - 'include', - '/reports-dashboards' - ); - } \ No newline at end of file diff --git a/dashboards-reports/.cypress/tsconfig.json b/dashboards-reports/.cypress/tsconfig.json deleted file mode 100644 index 2d48dc0e..00000000 --- a/dashboards-reports/.cypress/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "allowJs": true, - "baseUrl": "../node_modules", - "types": ["cypress"] - }, - "include": ["**/*.*"] -} \ No newline at end of file diff --git a/dashboards-reports/.eslintrc b/dashboards-reports/.eslintrc deleted file mode 100644 index 52a1c6be..00000000 --- a/dashboards-reports/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ ---- -extends: '@elastic/kibana' - -settings: - import/resolver: - '@osd/eslint-import-resolver-kibana': - rootPackageName: 'reports-dashboards' - pluginPaths: - - . diff --git a/dashboards-reports/.gitignore b/dashboards-reports/.gitignore deleted file mode 100644 index 16b7cd30..00000000 --- a/dashboards-reports/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -npm-debug.log* -node_modules -/build/ -/public/app.css -.idea/ -yarn-error.log -/coverage/ -.DS_Store -.history/ -.eslintcache -package-lock.json -/target/ diff --git a/dashboards-reports/.i18nrc.json b/dashboards-reports/.i18nrc.json deleted file mode 100644 index f60aeca5..00000000 --- a/dashboards-reports/.i18nrc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "paths": { - "opensearch.reports": "public" - }, - "exclude": [], - "translations": ["translations/zh-CN.json", "translations/pl.json"] -} diff --git a/dashboards-reports/.lintstagedrc b/dashboards-reports/.lintstagedrc deleted file mode 100644 index e7e7db11..00000000 --- a/dashboards-reports/.lintstagedrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "*.{ts,tsx,js,jsx,json,css,md}": ["prettier --write", "git add"] -} diff --git a/dashboards-reports/.opensearch_dashboards-plugin-helpers.json b/dashboards-reports/.opensearch_dashboards-plugin-helpers.json deleted file mode 100644 index eee5a7ea..00000000 --- a/dashboards-reports/.opensearch_dashboards-plugin-helpers.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "serverSourcePatterns": [ - "package.json", - "tsconfig.json", - "yarn.lock", - ".i18nrc.json", - "common/**/*", - "scripts/**/*", - "public/**/*", - "server/**/*", - "translations/**/*" - ] -} diff --git a/dashboards-reports/.prettierignore b/dashboards-reports/.prettierignore deleted file mode 100644 index 7dc413d2..00000000 --- a/dashboards-reports/.prettierignore +++ /dev/null @@ -1,8 +0,0 @@ -.vscode -build -coverage -node_modules -npm-debug.log -yarn.lock -*.md -*.lock \ No newline at end of file diff --git a/dashboards-reports/.prettierrc b/dashboards-reports/.prettierrc deleted file mode 100644 index f443e3cf..00000000 --- a/dashboards-reports/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "trailingComma": "es5", - "singleQuote": true, - "printWidth": 80, - "bracketSpacing": true -} diff --git a/dashboards-reports/DEVELOPER_GUIDE.md b/dashboards-reports/DEVELOPER_GUIDE.md deleted file mode 100644 index 39e2ffbc..00000000 --- a/dashboards-reports/DEVELOPER_GUIDE.md +++ /dev/null @@ -1,67 +0,0 @@ -## Developer Guide - -So you want to contribute code to this project? Excellent! We're glad you're here. Here's what you need to do. - -## Install Prerequisites - -### JDK 11 - -OpenSearch builds using Java 11 at a minimum. This means you must have a JDK 11 -installed with the environment variable `JAVA_HOME` referencing the path to Java home -for your JDK 11 installation, e.g. `JAVA_HOME=/usr/lib/jvm/jdk-11`. - -By default, tests use the same runtime as `JAVA_HOME`. However, since OpenSearch -supports JDK 8, the build supports compiling with JDK 11 and testing on a different -version of JDK runtime. To do this, set `RUNTIME_JAVA_HOME` pointing to the Java home of -another JDK installation, e.g. `RUNTIME_JAVA_HOME=/usr/lib/jvm/jdk-8`. - -## Setup - -1. Download OpenSearch for the version that matches the [OpenSearch Dashboards version specified in package.json](./package.json#L7). -1. Download the OpenSearch Dashboards source code for the [version specified in package.json](./package.json#L7) you want to set up. - -1. Change your node version to the version specified in `.node-version` inside the OpenSearch Dashboards root directory. -1. Create a `plugins` directory inside the OpenSearch Dashboards source code directory, if `plugins` directory doesn't exist. -1. Check out this package from version control into the `plugins` directory. - ``` - git clone git@github.com:opensearch-project/dashboards-reports.git plugins --no-checkout - cd plugins - echo 'dashboards-reports/*' >> .git/info/sparse-checkout - git config core.sparseCheckout true - git checkout dev - ``` -1. Run `yarn osd bootstrap` inside `OpenSearch-Dashboards/plugins/dashboards-reports`. - -Ultimately, your directory structure should look like this: - - -```md -. -├── OpenSearch-Dashboards -│ └──plugins -│ └── dashboards-reports -``` - -## Build - -To build the plugin's distributable zip simply run `yarn build`. - -Example output: `./build/reports-dashboards-0.0.1.zip` - -## Run - -- `yarn start` - - Starts OpenSearch Dashboards and includes this plugin. OpenSearch Dashboards will be available on `localhost:5601`. - -- `yarn test:jest` - - Runs the plugin tests. - -### Backports - -The Github workflow in [`backport.yml`](../.github/workflows/backport.yml) creates backport PRs automatically when the original PR -with an appropriate label `backport ` is merged to main with the backport workflow run successfully on the -PR. For example, if a PR on main needs to be backported to `1.x` branch, add a label `backport 1.x` to the PR and make sure the -backport workflow runs on the PR along with other checks. Once this PR is merged to main, the workflow will create a backport PR -to the `1.x` branch. \ No newline at end of file diff --git a/dashboards-reports/README.md b/dashboards-reports/README.md deleted file mode 100644 index 85204bf8..00000000 --- a/dashboards-reports/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# OpenSearch Dashboards Reports - -OpenSearch Dashboards Reports allows ‘Report Owner’ (engineers, including but not limited to developers, DevOps, IT Engineer, and IT admin) export and share reports from OpenSearch Dashboards dashboards, saved search, alerts and visualizations. It helps automate the process of scheduling reports on an on-demand or a periodical basis (on cron schedules as well). Further, it also automates the process of exporting and sharing reports triggered for various alerts. The feature is present in the Dashboard, Discover, and Visualization tabs. We are currently working on integrating Dashboards Reports with Notifications to enable sharing functionality. After the support is introduced, scheduled reports can be sent to (shared with) self or various stakeholders within the organization. These stakeholders include but are not limited to, executives, managers, engineers (developers, DevOps, IT Engineer) in the form of pdf, hyperlinks, csv, excel via various channels such as email, Slack, and Amazon Chime. However, in order to export, schedule and share reports, report owners should have the necessary permissions as defined under Roles and Privileges. - -## Contributing - -See [developer guide](DEVELOPER_GUIDE.md) and [how to contribute to this project](../CONTRIBUTING.md). - -## Code of Conduct - -This project has adopted the [Amazon Open Source Code of Conduct](../CODE_OF_CONDUCT.md). For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq), or contact [opensource-codeofconduct@amazon.com](mailto:opensource-codeofconduct@amazon.com) with any additional questions or comments. - -## Security - -If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public GitHub issue. - -## License - -See the [LICENSE](../LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. - -## Copyright - -Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/dashboards-reports/THIRD-PARTY b/dashboards-reports/THIRD-PARTY deleted file mode 100644 index 4de447de..00000000 --- a/dashboards-reports/THIRD-PARTY +++ /dev/null @@ -1,203 +0,0 @@ -** @elastic/eui; version 5.1.0 -- https://elastic.github.io/eui/#/ - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND -DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, and - distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by the - copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all other - entities that control, are controlled by, or are under common control - with that entity. For the purposes of this definition, "control" means - (i) the power, direct or indirect, to cause the direction or management - of such entity, whether by contract or otherwise, or (ii) ownership of - fifty percent (50%) or more of the outstanding shares, or (iii) - beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity exercising - permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation source, - and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but not limited - to compiled object code, generated documentation, and conversions to - other media types. - - "Work" shall mean the work of authorship, whether in Source or Object - form, made available under the License, as indicated by a copyright - notice that is included in or attached to the work (an example is - provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object form, - that is based on (or derived from) the Work and for which the editorial - revisions, annotations, elaborations, or other modifications represent, - as a whole, an original work of authorship. For the purposes of this - License, Derivative Works shall not include works that remain separable - from, or merely link (or bind by name) to the interfaces of, the Work and - Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including the original - version of the Work and any modifications or additions to that Work or - Derivative Works thereof, that is intentionally submitted to Licensor for - inclusion in the Work by the copyright owner or by an individual or Legal - Entity authorized to submit on behalf of the copyright owner. For the - purposes of this definition, "submitted" means any form of electronic, - verbal, or written communication sent to the Licensor or its - representatives, including but not limited to communication on electronic - mailing lists, source code control systems, and issue tracking systems - that are managed by, or on behalf of, the Licensor for the purpose of - discussing and improving the Work, but excluding communication that is - conspicuously marked or otherwise designated in writing by the copyright - owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity on - behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of this - License, each Contributor hereby grants to You a perpetual, worldwide, - non-exclusive, no-charge, royalty-free, irrevocable copyright license to - reproduce, prepare Derivative Works of, publicly display, publicly perform, - sublicense, and distribute the Work and such Derivative Works in Source or - Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of this - License, each Contributor hereby grants to You a perpetual, worldwide, - non-exclusive, no-charge, royalty-free, irrevocable (except as stated in - this section) patent license to make, have made, use, offer to sell, sell, - import, and otherwise transfer the Work, where such license applies only to - those patent claims licensable by such Contributor that are necessarily - infringed by their Contribution(s) alone or by combination of their - Contribution(s) with the Work to which such Contribution(s) was submitted. - If You institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work or a - Contribution incorporated within the Work constitutes direct or contributory - patent infringement, then any patent licenses granted to You under this - License for that Work shall terminate as of the date such litigation is - filed. - - 4. Redistribution. You may reproduce and distribute copies of the Work or - Derivative Works thereof in any medium, with or without modifications, and - in Source or Object form, provided that You meet the following conditions: - - (a) You must give any other recipients of the Work or Derivative Works a - copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating - that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works that You - distribute, all copyright, patent, trademark, and attribution notices - from the Source form of the Work, excluding those notices that do not - pertain to any part of the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must include - a readable copy of the attribution notices contained within such NOTICE - file, excluding those notices that do not pertain to any part of the - Derivative Works, in at least one of the following places: within a - NOTICE text file distributed as part of the Derivative Works; within the - Source form or documentation, if provided along with the Derivative - Works; or, within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents of the - NOTICE file are for informational purposes only and do not modify the - License. You may add Your own attribution notices within Derivative Works - that You distribute, alongside or as an addendum to the NOTICE text from - the Work, provided that such additional attribution notices cannot be - construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may - provide additional or different license terms and conditions for use, - reproduction, or distribution of Your modifications, or for any such - Derivative Works as a whole, provided Your use, reproduction, and - distribution of the Work otherwise complies with the conditions stated in - this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, any - Contribution intentionally submitted for inclusion in the Work by You to the - Licensor shall be under the terms and conditions of this License, without - any additional terms or conditions. Notwithstanding the above, nothing - herein shall supersede or modify the terms of any separate license agreement - you may have executed with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, except - as required for reasonable and customary use in describing the origin of the - Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in - writing, Licensor provides the Work (and each Contributor provides its - Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied, including, without limitation, any - warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or - FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining - the appropriateness of using or redistributing the Work and assume any risks - associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, whether - in tort (including negligence), contract, or otherwise, unless required by - applicable law (such as deliberate and grossly negligent acts) or agreed to - in writing, shall any Contributor be liable to You for damages, including - any direct, indirect, special, incidental, or consequential damages of any - character arising as a result of this License or out of the use or inability - to use the Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all other - commercial damages or losses), even if such Contributor has been advised of - the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing the Work - or Derivative Works thereof, You may choose to offer, and charge a fee for, - acceptance of support, warranty, indemnity, or other liability obligations - and/or rights consistent with this License. However, in accepting such - obligations, You may act only on Your own behalf and on Your sole - responsibility, not on behalf of any other Contributor, and only if You - agree to indemnify, defend, and hold each Contributor harmless for any - liability incurred by, or claims asserted against, such Contributor by - reason of your accepting any such warranty or additional liability. END OF - TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets "[]" replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification -within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); - -you may not use this file except in compliance with the License. - -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software - -distributed under the License is distributed on an "AS IS" BASIS, - -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -See the License for the specific language governing permissions and - -limitations under the License. - -* For dashboards-reports see also this required NOTICE: - dashboards-reports - Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/dashboards-reports/babel.config.js b/dashboards-reports/babel.config.js deleted file mode 100644 index aab76c8a..00000000 --- a/dashboards-reports/babel.config.js +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -module.exports = { - presets: [ - require('@babel/preset-env', { - targets: { node: '10' }, - }), - require('@babel/preset-react'), - require('@babel/preset-typescript'), - ], - plugins: [ - require('@babel/plugin-proposal-class-properties'), - require('@babel/plugin-proposal-object-rest-spread'), - ['@babel/plugin-transform-modules-commonjs', { allowTopLevelThis: true }], - [require('@babel/plugin-transform-runtime'), { regenerator: true }], - ], -}; diff --git a/dashboards-reports/common/index.ts b/dashboards-reports/common/index.ts deleted file mode 100644 index ce180a09..00000000 --- a/dashboards-reports/common/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const PLUGIN_NAME = 'Reporting'; -export const PLUGIN_ID = 'reports-dashboards'; - -export const API_PREFIX = '/api/reporting'; - -const BASE_REPORTS_URI = '/_plugins/_reports'; - -export const OPENSEARCH_REPORTS_API = { - ON_DEMAND_REPORT: `${BASE_REPORTS_URI}/on_demand`, - REPORT_INSTANCE: `${BASE_REPORTS_URI}/instance`, - LIST_REPORT_INSTANCES: `${BASE_REPORTS_URI}/instances`, - REPORT_DEFINITION: `${BASE_REPORTS_URI}/definition`, - LIST_REPORT_DEFINITIONS: `${BASE_REPORTS_URI}/definitions`, -}; - -const REPORTING_NOTIFICATIONS_API_PREFIX = '/api/reporting_notifications'; -export const REPORTING_NOTIFICATIONS_DASHBOARDS_API = Object.freeze({ - GET_CONFIGS: `${REPORTING_NOTIFICATIONS_API_PREFIX}/get_configs`, - GET_EVENT: `${REPORTING_NOTIFICATIONS_API_PREFIX}/get_event`, - SEND_TEST_MESSAGE: `${REPORTING_NOTIFICATIONS_API_PREFIX}/test_message`, -}); - -const NOTIFICATIONS_API_BASE_PATH = '/_plugins/_notifications'; -export const NOTIFICATIONS_API = Object.freeze({ - CONFIGS: `${NOTIFICATIONS_API_BASE_PATH}/configs`, - EVENTS: `${NOTIFICATIONS_API_BASE_PATH}/events`, - TEST_MESSAGE: `${NOTIFICATIONS_API_BASE_PATH}/feature/test`, -}); diff --git a/dashboards-reports/cypress.json b/dashboards-reports/cypress.json deleted file mode 100644 index e72b2afa..00000000 --- a/dashboards-reports/cypress.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "video": true, - "fixturesFolder": ".cypress/fixtures", - "integrationFolder": ".cypress/integration", - "pluginsFile": ".cypress/plugins/index.js", - "screenshotsFolder": ".cypress/screenshots", - "supportFile": ".cypress/support/index.js", - "videosFolder": ".cypress/videos", - "requestTimeout": 60000, - "responseTimeout": 60000, - "defaultCommandTimeout": 60000, - "env": { - "opensearch": "localhost:9200", - "opensearchDashboards": "localhost:5601", - "security_enabled": true - } -} diff --git a/dashboards-reports/opensearch_dashboards.json b/dashboards-reports/opensearch_dashboards.json deleted file mode 100644 index f593bb7f..00000000 --- a/dashboards-reports/opensearch_dashboards.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "reportsDashboards", - "version": "2.5.0.0", - "opensearchDashboardsVersion": "2.5.0", - "requiredPlugins": ["navigation", "data", "opensearchDashboardsUtils"], - "optionalPlugins": ["share"], - "server": true, - "ui": true, - "configPath": ["opensearch_reporting"] -} diff --git a/dashboards-reports/package.json b/dashboards-reports/package.json deleted file mode 100644 index c266a1d1..00000000 --- a/dashboards-reports/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "name": "reports-dashboards", - "version": "2.5.0.0", - "description": "OpenSearch Dashboards Reports Plugin", - "license": "Apache-2.0", - "main": "index.ts", - "scripts": { - "osd": "node ../../scripts/osd", - "opensearch": "node ../../scripts/opensearch", - "lint": "eslint .", - "start": "yarn plugin_helpers start", - "build": "yarn plugin_helpers build", - "test": "../../node_modules/.bin/jest --config ./test/jest.config.js", - "cypress:run": "cypress run", - "cypress:open": "cypress open", - "plugin_helpers": "node ../../scripts/plugin_helpers", - "postinstall": "node ./scripts/patch-html2canvas.js" - }, - "dependencies": { - "babel-polyfill": "^6.26.0", - "cron-validator": "^1.1.1", - "dompurify": "^2.4.1", - "elastic-builder": "^2.7.1", - "enzyme-adapter-react-16": "^1.15.5", - "html2canvas": "1.4.1", - "jest-fetch-mock": "^3.0.3", - "jquery": "^3.5.0", - "jsdom": "16.5.0", - "json-2-csv": "^3.7.6", - "jspdf": "^2.5.1", - "react-addons-test-utils": "^15.6.2", - "react-id-generator": "^3.0.1", - "react-markdown": "^4.3.1", - "react-mde": "^10.2.1", - "react-native-base64": "^0.0.2", - "react-native-i18n": "^2.0.15", - "react-navigation": "^4.3.9", - "react-router-dom": "^5.3.0", - "react-toast-notifications": "^2.4.0", - "set-interval-async": "1.0.33", - "showdown": "^1.9.1" - }, - "devDependencies": { - "@elastic/eslint-import-resolver-kibana": "link:../../packages/osd-eslint-import-resolver-opensearch-dashboards", - "@types/dompurify": "^2.3.3", - "@types/enzyme-adapter-react-16": "^1.0.6", - "@types/jsdom": "^16.2.3", - "@types/react": "^16.14.23", - "@types/react-addons-test-utils": "^0.14.25", - "@types/react-dom": "^16.9.8", - "@types/react-test-renderer": "^16.9.1", - "@types/set-interval-async": "^1.0.0", - "@types/showdown": "^1.9.3", - "babel-jest": "^27.5.1", - "cypress": "^5.0.0", - "elastic-builder": "^2.7.1", - "eslint-plugin-babel": "^5.3.1", - "eslint-plugin-no-unsanitized": "^3.0.2", - "eslint-plugin-prefer-object-spread": "^1.2.1", - "identity-obj-proxy": "^3.0.0", - "jest-dom": "^4.0.0", - "react-test-renderer": "^16.12.0", - "replace-in-file": "^6.3.5", - "ts-jest": "^26.1.0" - }, - "resolutions": { - "trim": "^1.0.0", - "doc-path": "2.1.2", - "y18n": "^5.0.5", - "lodash": "^4.17.21", - "path-parse": "^1.0.7", - "glob-parent": "^5.1.2", - "css-what": "^5.0.1", - "ansi-regex": "5.0.1", - "json-schema": "0.4.0", - "ws": "^7.4.6", - "minimatch": "^3.0.5", - "terser": "^4.8.1", - "moment": "^2.29.4", - "loader-utils": "^2.0.3" - } -} diff --git a/dashboards-reports/public/app.scss b/dashboards-reports/public/app.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/dashboards-reports/public/application.tsx b/dashboards-reports/public/application.tsx deleted file mode 100644 index 5fc2379d..00000000 --- a/dashboards-reports/public/application.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import ReactDOM from 'react-dom'; -import { AppMountParameters, CoreStart } from '../../../src/core/public'; -import { AppPluginStartDependencies } from './types'; -import { ReportsDashboardsApp } from './components/app'; - -export const renderApp = ( - { notifications, http, chrome }: CoreStart, - { navigation }: AppPluginStartDependencies, - { appBasePath, element }: AppMountParameters -) => { - ReactDOM.render( - , - element - ); - - return () => ReactDOM.unmountComponentAtNode(element); -}; diff --git a/dashboards-reports/public/components/app.tsx b/dashboards-reports/public/components/app.tsx deleted file mode 100644 index 4091c0d7..00000000 --- a/dashboards-reports/public/components/app.tsx +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { FormattedMessage, I18nProvider } from '@osd/i18n/react'; -import { HashRouter as Router, Route, Switch } from 'react-router-dom'; - -import { - EuiPage, - EuiPageBody, - EuiPageContentBody, - EuiPageContentHeader, - EuiPageContentHeaderSection, -} from '@elastic/eui'; -import CSS from 'csstype'; -import { - CoreStart, - CoreSystem, - ChromeBreadcrumb, - IUiSettingsClient, -} from '../../../../src/core/public'; -import { NavigationPublicPluginStart } from '../../../../src/plugins/navigation/public'; - -import { CreateReport } from './report_definitions/create/create_report_definition'; -import { Main } from './main/main'; -import { ReportDetails } from './main/report_details/report_details'; -import { ReportDefinitionDetails } from './main/report_definition_details/report_definition_details'; -import { EditReportDefinition } from './report_definitions/edit/edit_report_definition'; -import { i18n } from '@osd/i18n'; - -export interface CoreInterface { - http: CoreStart['http']; - uiSettings: IUiSettingsClient; - setBreadcrumbs: (newBreadcrumbs: ChromeBreadcrumb[]) => void; -} - -interface ReportsDashboardsAppDeps { - basename: string; - notifications: CoreStart['notifications']; - http: CoreStart['http']; - navigation: NavigationPublicPluginStart; - chrome: CoreStart['chrome']; -} - -const styles: CSS.Properties = { - float: 'left', - width: '100%', - maxWidth: '1600px', -}; - -export const ReportsDashboardsApp = ({ - basename, - notifications, - http, - navigation, - chrome, -}: ReportsDashboardsAppDeps) => { - // Render the application DOM. - return ( - - -
- - - - - - - - ( - - )} - /> - ( - - )} - /> - ( - - )} - /> - ( - - )} - /> - ( -
- )} - /> - - - - -
-
-
- ); -}; diff --git a/dashboards-reports/public/components/context_menu/context_menu.js b/dashboards-reports/public/components/context_menu/context_menu.js deleted file mode 100644 index 0b7485ab..00000000 --- a/dashboards-reports/public/components/context_menu/context_menu.js +++ /dev/null @@ -1,397 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -/* eslint-disable no-restricted-globals */ -//@ts-check -import { i18n } from '@osd/i18n'; -import $ from 'jquery'; -import { parse } from 'url'; -import { readStreamToFile } from '../main/main_utils'; -import { uiSettingsService } from '../utils/settings_service'; -import { - GENERATE_REPORT_PARAM, - GENERATE_REPORT_PARAM_REGEX, -} from '../visual_report/constants'; -import { generateReport } from '../visual_report/generate_report'; -import { - addSuccessOrFailureToast, - contextMenuCreateReportDefinition, - contextMenuViewReports, - displayLoadingModal, - getTimeFieldsFromUrl, - replaceQueryURL, -} from './context_menu_helpers'; -import { - getMenuItem, - popoverMenu, - popoverMenuDiscover, -} from './context_menu_ui'; - -const generateInContextReport = async ( - timeRanges, - queryUrl, - fileFormat, - rest = {} -) => { - displayLoadingModal(); - const baseUrl = queryUrl.substr(0, queryUrl.indexOf('?')); - // Add selected tenant info to url - try { - const tenant = await getTenantInfoIfExists(); - if (tenant) { - queryUrl = addTenantToURL(queryUrl, tenant); - } - } catch (error) { - addSuccessOrFailureToast('failure'); - console.log(`failed to get user tenant: ${error}`); - } - - let reportSource = ''; - if (/\/app\/dashboards/.test(baseUrl)) { - reportSource = 'Dashboard'; - } else if (/\/app\/visualize/.test(baseUrl)) { - reportSource = 'Visualization'; - } else if (/\/app\/discover/.test(baseUrl)) { - reportSource = 'Saved search'; - } - - // create query body - const contextMenuOnDemandReport = { - query_url: queryUrl, - time_from: timeRanges.time_from.valueOf(), - time_to: timeRanges.time_to.valueOf(), - report_definition: { - report_params: { - report_name: 'On_demand_report', - report_source: reportSource, - description: 'In-context report download', - core_params: { - base_url: baseUrl, - report_format: fileFormat, - time_duration: timeRanges.time_duration, - ...rest, - }, - }, - delivery: { - configIds: [''], - title: '', - textDescription: '', - htmlDescription: '', - }, - trigger: { - trigger_type: 'On demand', - }, - }, - }; - - fetch( - `../api/reporting/generateReport?${new URLSearchParams( - uiSettingsService.getSearchParams() - )}`, - { - headers: { - 'Content-Type': 'application/json', - 'osd-xsrf': 'reporting', - accept: '*/*', - 'accept-language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6', - pragma: 'no-cache', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-origin', - }, - method: 'POST', - body: JSON.stringify(contextMenuOnDemandReport), - referrerPolicy: 'strict-origin-when-cross-origin', - mode: 'cors', - credentials: 'include', - } - ) - .then(async (response) => [response.status, await response.json()]) - .then(async ([status, data]) => { - if (status !== 200) { - if (status === 403) { - addSuccessOrFailureToast('permissionsFailure'); - } else if (status === 503) { - addSuccessOrFailureToast('timeoutFailure', reportSource); - } else { - addSuccessOrFailureToast('failure'); - } - } else if (fileFormat === 'pdf' || fileFormat === 'png') { - try { - await generateReport(data.reportId); - addSuccessOrFailureToast('success'); - } catch (error) { - console.error(error); - addSuccessOrFailureToast('failure'); - } - } else if (data.data) { - await readStreamToFile(data.data, fileFormat, data.filename); - } - $('#reportGenerationProgressModal').remove(); - }); -}; - -// try to match uuid and user entered custom-id followed by '?' in URL, which would be the saved search id for discover URL -// custom id example: v1s-f00-b4r1-01, Filebeat-Apache-Dashboard-ecs, -const getUuidFromUrl = () => window.location.href.match(/([0-9a-zA-Z-]+)\?/); -const isDiscover = () => window.location.href.includes('discover'); - -// open Download drop-down -$(function () { - $(document).on('click', '#downloadReport', function () { - const popoverScreen = document.querySelectorAll('body'); - if (popoverScreen) { - try { - const reportPopover = document.createElement('div'); - // eslint-disable-next-line no-unsanitized/property - reportPopover.innerHTML = isDiscover() - ? popoverMenuDiscover(getUuidFromUrl()) - : popoverMenu(getUuidFromUrl()); - popoverScreen[0].appendChild(reportPopover.children[0]); - $('#reportPopover').show(); - } catch (e) { - console.log('error displaying menu:', e); - } - } - }); - - // generate PDF onclick - $(document).on('click', '#generatePDF', function () { - const timeRanges = getTimeFieldsFromUrl(); - const queryUrl = replaceQueryURL(location.href); - generateInContextReport(timeRanges, queryUrl, 'pdf'); - }); - - // generate PNG onclick - $(document).on('click', '#generatePNG', function () { - const timeRanges = getTimeFieldsFromUrl(); - const queryUrl = replaceQueryURL(location.href); - generateInContextReport(timeRanges, queryUrl, 'png'); - }); - - // generate CSV onclick - $(document).on('click', '#generateCSV', function () { - const timeRanges = getTimeFieldsFromUrl(); - const queryUrl = replaceQueryURL(location.href); - const saved_search_id = getUuidFromUrl()[1]; - generateInContextReport(timeRanges, queryUrl, 'csv', { saved_search_id }); - }); - - // navigate to Create report definition page with report source and pre-set time range - $(document).on('click', '#createReportDefinition', function () { - contextMenuCreateReportDefinition(this.baseURI); - }); - - // redirect to Reporting home page - $(document).on('click', '#viewReports', function () { - contextMenuViewReports(); - }); - - // close popover menu on click outside - $('body').on('click', function (e) { - if ($(e.target).data('toggle') !== '#downloadReport') { - $('#reportPopover').remove(); - } - }); - - // close modal/toast - $(function () { - // close modal with 'x' in upper-right modal - $(document).on('click', '#closeReportGenerationModal', function () { - $('#reportGenerationProgressModal').remove(); - }); - - // close modal with the close EuiButton - $(document).on('click', '#closeReportGenerationModalButton', function () { - $('#reportGenerationProgressModal').remove(); - }); - - // close the toast that appears upon successful report generation - $(document).on('click', '#closeReportSuccessToast', function () { - $('#reportSuccessToast').remove(); - }); - - // close the toast that apepars upon failure of report generation - $(document).on('click', '#closeReportFailureToast', function () { - $('#reportFailureToast').remove(); - }); - - // close permissions failure toast - $(document).on('click', '#permissionsMissingErrorToast', function () { - $('#permissionsMissingErrorToast').remove(); - }); - }); - - checkURLParams(); - locationHashChanged(); -}); - -/* generate a report if flagged in URL params */ -const checkURLParams = async () => { - const [hash, query] = location.href.split('#')[1].split('?'); - const params = new URLSearchParams(query); - const id = params.get(GENERATE_REPORT_PARAM); - if (!id) return; - await new Promise((resolve) => setTimeout(resolve, 1000)); - displayLoadingModal(); - try { - await generateReport(id, 30000); - window.history.replaceState( - {}, - '', - `#${hash}?${query.replace(GENERATE_REPORT_PARAM_REGEX, '')}` - ); - addSuccessOrFailureToast('success'); - } catch (error) { - console.error(error); - addSuccessOrFailureToast('failure'); - } finally { - $('#reportGenerationProgressModal').remove(); - } -}; - -const isDiscoverNavMenu = (navMenu) => { - return ( - navMenu[0].children.length === 5 && - ($('[data-test-subj="breadcrumb first"]').prop('title') === 'Discover' || - $('[data-test-subj="breadcrumb first last"]').prop('title') === - 'Discover') - ); -}; - -const isDashboardNavMenu = (navMenu) => { - return ( - (navMenu[0].children.length === 4 || navMenu[0].children.length === 6) && - $('[data-test-subj="breadcrumb first"]').prop('title') === 'Dashboard' - ); -}; - -const isVisualizationNavMenu = (navMenu) => { - return ( - navMenu[0].children.length === 3 && - $('[data-test-subj="breadcrumb first"]').prop('title') === 'Visualize' - ); -}; - -function locationHashChanged() { - const observer = new MutationObserver(function (mutations) { - const navMenu = document.querySelectorAll( - 'span.osdTopNavMenu__wrapper > nav.euiHeaderLinks > div.euiHeaderLinks__list' - ); - if ( - navMenu && - navMenu.length && - (isDiscoverNavMenu(navMenu) || - isDashboardNavMenu(navMenu) || - isVisualizationNavMenu(navMenu)) - ) { - try { - if ($('#downloadReport').length) { - return; - } - const menuItem = document.createElement('div'); - menuItem.innerHTML = getMenuItem( - i18n.translate('opensearch.reports.menu.name', { - defaultMessage: 'Reporting', - }) - ); - navMenu[0].insertBefore(menuItem.children[0], navMenu[0].lastChild); - } catch (e) { - console.log(e); - } finally { - observer.disconnect(); - } - } - }); - - // Start observing - observer.observe(document.body, { - //document.body is node target to observe - childList: true, //This is a must have for the observer with subtree - subtree: true, //Set to true if changes must also be observed in descendants. - }); -} - -$(window).one('hashchange', function (e) { - locationHashChanged(); -}); -/** - * for navigating to tabs from OpenSearch Dashboards sidebar, it uses history.pushState, which doesn't trigger onHashchange. - * https://stackoverflow.com/questions/4570093/how-to-get-notified-about-changes-of-the-history-via-history-pushstate/4585031 - */ -(function (history) { - const pushState = history.pushState; - history.pushState = function (state) { - if (typeof history.onpushstate === 'function') { - history.onpushstate({ state: state }); - } - return pushState.apply(history, arguments); - }; -})(window.history); - -window.onpopstate = history.onpushstate = () => { - locationHashChanged(); -}; - -async function getTenantInfoIfExists() { - const res = await fetch(`../api/v1/multitenancy/tenant`, { - headers: { - 'Content-Type': 'application/json', - 'osd-xsrf': 'reporting', - accept: '*/*', - 'accept-language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6', - pragma: 'no-cache', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-origin', - }, - method: 'GET', - referrerPolicy: 'strict-origin-when-cross-origin', - mode: 'cors', - credentials: 'include', - }) - .then((response) => { - if (response.status === 404) { - // endpoint doesn't exist, security plugin is not enabled. - return undefined; - } else { - return response.text(); - } - }) - .then((tenant) => { - if (tenant === '') { - tenant = 'global'; - } else if (tenant === '__user__') { - tenant = 'private'; - } - return tenant; - }); - - return res; -} - -// helper function to add tenant info to url(if tenant is available) -function addTenantToURL(url, userRequestedTenant) { - // build fake url from relative url - const fakeUrl = `http://opensearch.com${url}`; - const tenantKey = 'security_tenant'; - const tenantKeyAndValue = - tenantKey + '=' + encodeURIComponent(userRequestedTenant); - - const { pathname, search } = parse(fakeUrl); - const queryDelimiter = !search ? '?' : '&'; - // The url parser returns null if the search is empty. Change that to an empty - // string so that we can use it to build the values later - if (search && search.toLowerCase().indexOf(tenantKey) > -1) { - // If we for some reason already have a tenant in the URL we skip any updates - return url; - } - - // A helper for finding the part in the string that we want to extend/replace - const valueToReplace = pathname + (search || ''); - const replaceWith = valueToReplace + queryDelimiter + tenantKeyAndValue; - - return url.replace(valueToReplace, replaceWith); -} diff --git a/dashboards-reports/public/components/context_menu/context_menu_helpers.js b/dashboards-reports/public/components/context_menu/context_menu_helpers.js deleted file mode 100644 index 3ebe5d76..00000000 --- a/dashboards-reports/public/components/context_menu/context_menu_helpers.js +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import dateMath from '@elastic/datemath'; -import moment from 'moment'; -import { - reportGenerationInProgressModal, - reportGenerationSuccess, - reportGenerationFailure, - permissionsMissingOnGeneration, -} from './context_menu_ui'; -import { timeRangeMatcher } from '../utils/utils'; -import { unhashUrl } from '../../../../../src/plugins/opensearch_dashboards_utils/public'; - -const getReportSourceURL = (baseURI) => { - const url = baseURI.substr(0, baseURI.indexOf('?')); - const reportSourceId = url.substr(url.lastIndexOf('/') + 1, url.length); - return reportSourceId; -}; - -export const contextMenuViewReports = () => - window.location.assign('reports-dashboards#/'); - -export const getTimeFieldsFromUrl = () => { - const url = unhashUrl(window.location.href); - - let [, fromDateString, toDateString] = url.match(timeRangeMatcher); - fromDateString = decodeURIComponent(fromDateString.replace(/[']+/g, '')); - // convert time range to from date format in case time range is relative - const fromDateFormat = dateMath.parse(fromDateString); - toDateString = decodeURIComponent(toDateString.replace(/[']+/g, '')); - const toDateFormat = dateMath.parse(toDateString, { roundUp: true }); - - const timeDuration = moment.duration(toDateFormat.diff(fromDateFormat)); - - return { - time_from: fromDateFormat, - time_to: toDateFormat, - time_duration: timeDuration.toISOString(), - }; -}; - -export const contextMenuCreateReportDefinition = (baseURI) => { - const reportSourceId = getReportSourceURL(baseURI); - let reportSource = ''; - const timeRanges = getTimeFieldsFromUrl(); - - // check report source - if (/\/app\/dashboards/.test(baseURI)) { - reportSource = 'dashboard:'; - } else if (/\/app\/visualize/.test(baseURI)) { - reportSource = 'visualize:'; - } else if (/\/app\/discover/.test(baseURI)) { - reportSource = 'discover:'; - } - reportSource += reportSourceId.toString(); - window.location.assign( - `reports-dashboards#/create?previous=${reportSource}?timeFrom=${timeRanges.time_from.toISOString()}?timeTo=${timeRanges.time_to.toISOString()}` - ); -}; - -export const displayLoadingModal = () => { - const opensearchDashboardsBody = document.getElementById( - 'opensearch-dashboards-body' - ); - if (opensearchDashboardsBody) { - try { - const loadingModal = document.createElement('div'); - loadingModal.innerHTML = reportGenerationInProgressModal(); - opensearchDashboardsBody.appendChild(loadingModal.children[0]); - } catch (e) { - console.log('error displaying loading modal:', e); - } - } -}; - -export const addSuccessOrFailureToast = (status, reportSource) => { - const generateToast = document.querySelectorAll('.euiGlobalToastList'); - if (generateToast) { - try { - const generateInProgressToast = document.createElement('div'); - if (status === 'success') { - generateInProgressToast.innerHTML = reportGenerationSuccess(); - setTimeout(function () { - document.getElementById('reportSuccessToast').style.display = 'none'; - }, 6000); // closes toast automatically after 6s - } else if (status === 'failure') { - generateInProgressToast.innerHTML = reportGenerationFailure(); - setTimeout(function () { - document.getElementById('reportFailureToast').style.display = 'none'; - }, 6000); - } else if (status === 'timeoutFailure') { - generateInProgressToast.innerHTML = reportGenerationFailure( - 'Error generating report.', - `Timed out generating on-demand report from ${reportSource}. Try again later.` - ); - setTimeout(function () { - document.getElementById('reportFailureToast').style.display = 'none'; - }, 6000); - } else if (status === 'permissionsFailure') { - generateInProgressToast.innerHTML = permissionsMissingOnGeneration(); - setTimeout(function () { - document.getElementById( - 'permissionsMissingErrorToast' - ).style.display = 'none'; - }, 6000); - } - generateToast[0].appendChild(generateInProgressToast.children[0]); - } catch (e) { - console.log('error displaying toast', e); - } - } -}; - -export const replaceQueryURL = (pageUrl) => { - // we unhash the url in case OpenSearch Dashboards advanced UI setting 'state:storeInSessionStorage' is turned on - const unhashedUrl = new URL(unhashUrl(pageUrl)); - let queryUrl = unhashedUrl.pathname + unhashedUrl.hash; - let [, fromDateStringMatch, toDateStringMatch] = - queryUrl.match(timeRangeMatcher); - const fromDateString = decodeURIComponent(fromDateStringMatch.replace(/[']+/g, '')); - - // convert time range to from date format in case time range is relative - const fromDateFormat = dateMath.parse(fromDateString); - const toDateString = decodeURIComponent(toDateStringMatch.replace(/[']+/g, '')); - const toDateFormat = dateMath.parse(toDateString, { roundUp: true }); - - // replace to and from dates with absolute date - queryUrl = queryUrl.replace( - fromDateStringMatch, - "'" + fromDateFormat.toISOString() + "'" - ); - queryUrl = queryUrl.replace( - toDateStringMatch, - "'" + toDateFormat.toISOString() + "'" - ); - return queryUrl; -}; diff --git a/dashboards-reports/public/components/context_menu/context_menu_ui.js b/dashboards-reports/public/components/context_menu/context_menu_ui.js deleted file mode 100644 index 119b7bae..00000000 --- a/dashboards-reports/public/components/context_menu/context_menu_ui.js +++ /dev/null @@ -1,396 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { i18n } from '@osd/i18n'; - -export const getMenuItem = (name) => { - return ` - - `; -}; - -export const popoverMenu = (savedObjectAvailable) => { - const buttonClass = savedObjectAvailable - ? 'euiContextMenuItem' - : 'euiContextMenuItem euiContextMenuItem-isDisabled'; - const button = savedObjectAvailable ? 'button' : 'button disabled'; - const popoverHeight = savedObjectAvailable ? '395px' : '380px'; - const message = savedObjectAvailable - ? i18n.translate('opensearch.reports.menu.visual.waitPrompt', { - defaultMessage: - 'Files can take a minute or two to generate depending on the size of your source data.', - }) - : i18n.translate('opensearch.reports.menu.visual.savePrompt', { - defaultMessage: - 'Save this Visualization/Dashboard to enable PDF/PNG reports.', - }); - - const arrowRight = '100px'; - const popoverRight = '77px'; - - return ` -
-
-
-
-
-
- -
-
- `; -}; - -// TODO: merge this function and popoverMenu() into one -export const popoverMenuDiscover = (savedObjectAvailable) => { - const buttonClass = savedObjectAvailable - ? 'euiContextMenuItem' - : 'euiContextMenuItem euiContextMenuItem-isDisabled'; - const button = savedObjectAvailable ? 'button' : 'button disabled'; - const popoverHeight = savedObjectAvailable ? '354px' : '322px'; - const message = savedObjectAvailable - ? i18n.translate('opensearch.reports.menu.csv.waitPrompt', { - defaultMessage: - 'Files can take a minute or two to generate depending on the size of your source data.', - }) - : i18n.translate('opensearch.reports.menu.csv.savePrompt', { - defaultMessage: 'Save this search to enable CSV reports.', - }); - const arrowRight = '60px'; - const popoverRight = '77px'; - - return ` -
-
-
-
-
-
- -
-
- `; -}; - -export const permissionsMissingOnGeneration = () => { - return ` -
-

${i18n.translate( - 'opensearch.reports.menu.newNotificationAppears', - { defaultMessage: 'A new notification appears' } - )}

-
- - ${i18n.translate( - 'opensearch.reports.menu.errorGeneratingReport', - { defaultMessage: 'Error generating report.' } - )} -
- -
-

${i18n.translate('opensearch.reports.menu.insufficientPermissions', { - defaultMessage: - 'Insufficient permissions. Reach out to your OpenSearch Dashboards administrator.', - })}

-
-
- `; -}; - -export const reportGenerationSuccess = () => { - return ` -
-

A new notification appears

-
- - ${i18n.translate( - 'opensearch.reports.menu.successfullyGenerated', - { defaultMessage: 'Successfully generated report.' } - )} -
- - -
- `; -}; - -export const reportGenerationFailure = ( - title = i18n.translate('opensearch.reports.menu.downloadError', { - defaultMessage: 'Download error', - }), - text = i18n.translate('opensearch.reports.menu.errorGeneratingThisReport', { - defaultMessage: 'There was an error generating this report.', - }) -) => { - return ` -
-

A new notification appears

-
- - ${title} -
- -
-

${text}

-
-
- `; -}; - -export const reportGenerationInProgressModal = () => { - return ` -
-
-
-
-
- -
-
-
-
-

${i18n.translate( - 'opensearch.reports.menu.progress.generatingReport', - { defaultMessage: 'Generating report' } - )}

-
-
-
-
-
-
${i18n.translate( - 'opensearch.reports.menu.progress.preparingYourFile', - { defaultMessage: 'Preparing your file for download.' } - )}
-
${i18n.translate( - 'opensearch.reports.menu.progress.youCanClose', - { - defaultMessage: - 'Please keep this dialog open while report is being generated.', - } - )}
-
-
-
-
-
-
-
-
-
-
-
-
- `; -}; diff --git a/dashboards-reports/public/components/main/__tests__/__snapshots__/main.test.tsx.snap b/dashboards-reports/public/components/main/__tests__/__snapshots__/main.test.tsx.snap deleted file mode 100644 index 7f552895..00000000 --- a/dashboards-reports/public/components/main/__tests__/__snapshots__/main.test.tsx.snap +++ /dev/null @@ -1,3908 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`
panel render component 1`] = ` -
-
-
-
-

- Reports - -

- ( - 0 - ) -

-

-
- - - -
-
-
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Creation time - - - - - - - - Generate - - -
-
- -
-

- No reports to display -

- -
-
-
-
- Create a report definition, or share/download a report from a dashboard, saved search or visualization. -
- -
-
- -
-
-
-
-
-
-
-
-
-
-
-
-

- Report definitions -

- - ( - 0 - ) -

-

-
-
- -
- - - -
-
-
-
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Schedule details - - - - - - Last Updated - - - - -
-
- -
-

- No report definitions to display -

- -
-
-
-
- Create a new report definition to get started -
- -
-
- -
-
- -
-
- -
-
-
-
-
-
-
-
-
-`; - -exports[`
panel render component after create success 1`] = ` -
-
-
-
-

- Reports - -

- ( - 0 - ) -

-

-
- - - -
-
-
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Creation time - - - - - - - - Generate - - -
-
- -
-

- No reports to display -

- -
-
-
-
- Create a report definition, or share/download a report from a dashboard, saved search or visualization. -
- -
-
- -
-
-
-
-
-
-
-
-
-
-
-
-

- Report definitions -

- - ( - 0 - ) -

-

-
-
- -
- - - -
-
-
-
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Schedule details - - - - - - Last Updated - - - - -
-
- -
-

- No report definitions to display -

- -
-
-
-
- Create a new report definition to get started -
- -
-
- -
-
- -
-
- -
-
-
-
-
-
-
-
-
-

- A new notification appears -

-
- - - Successfully created report definition. - -
- -
-
-
-`; - -exports[`
panel render component after delete success 1`] = ` -
-
-
-
-

- Reports - -

- ( - 0 - ) -

-

-
- - - -
-
-
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Creation time - - - - - - - - Generate - - -
-
- -
-

- No reports to display -

- -
-
-
-
- Create a report definition, or share/download a report from a dashboard, saved search or visualization. -
- -
-
- -
-
-
-
-
-
-
-
-
-
-
-
-

- Report definitions -

- - ( - 0 - ) -

-

-
-
- -
- - - -
-
-
-
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Schedule details - - - - - - Last Updated - - - - -
-
- -
-

- No report definitions to display -

- -
-
-
-
- Create a new report definition to get started -
- -
-
- -
-
- -
-
- -
-
-
-
-
-
-
-
-
-

- A new notification appears -

-
- - - Successfully deleted report definition. - -
- -
-
-
-`; - -exports[`
panel render component after edit success 1`] = ` -
-
-
-
-

- Reports - -

- ( - 0 - ) -

-

-
- - - -
-
-
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Creation time - - - - - - - - Generate - - -
-
- -
-

- No reports to display -

- -
-
-
-
- Create a report definition, or share/download a report from a dashboard, saved search or visualization. -
- -
-
- -
-
-
-
-
-
-
-
-
-
-
-
-

- Report definitions -

- - ( - 0 - ) -

-

-
-
- -
- - - -
-
-
-
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Schedule details - - - - - - Last Updated - - - - -
-
- -
-

- No report definitions to display -

- -
-
-
-
- Create a new report definition to get started -
- -
-
- -
-
- -
-
- -
-
-
-
-
-
-
-
-
-

- A new notification appears -

-
- - - Successfully updated report definition. - -
- -
-
-
-`; diff --git a/dashboards-reports/public/components/main/__tests__/__snapshots__/report_definitions_table.test.tsx.snap b/dashboards-reports/public/components/main/__tests__/__snapshots__/report_definitions_table.test.tsx.snap deleted file mode 100644 index a2a56bfd..00000000 --- a/dashboards-reports/public/components/main/__tests__/__snapshots__/report_definitions_table.test.tsx.snap +++ /dev/null @@ -1,954 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` panel render component 1`] = ` -
-
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Schedule details - - - - - - Last Updated - - - - -
-
- Name -
-
- -
-
-
- Source -
-
- -
-
-
- Type -
-
- - Download - -
-
-
- Schedule details -
-
- -
-
-
- Last Updated -
-
-
- Invalid Date @ Invalid Date -
-
-
-
- Status -
-
- - Created - -
-
-
- Name -
-
- -
-
-
- Source -
-
- -
-
-
- Type -
-
- - Download - -
-
-
- Schedule details -
-
- -
-
-
- Last Updated -
-
-
- Invalid Date @ Invalid Date -
-
-
-
- Status -
-
- - Created - -
-
-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-`; - -exports[` panel render empty table 1`] = ` -
-
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Schedule details - - - - - - Last Updated - - - - -
-
- -
-

- No report definitions to display -

- -
-
-
-
- Create a new report definition to get started -
- -
-
- -
-
- -
-
- -
-
-
-
-
-
-`; diff --git a/dashboards-reports/public/components/main/__tests__/__snapshots__/reports_table.test.tsx.snap b/dashboards-reports/public/components/main/__tests__/__snapshots__/reports_table.test.tsx.snap deleted file mode 100644 index d2593c6e..00000000 --- a/dashboards-reports/public/components/main/__tests__/__snapshots__/reports_table.test.tsx.snap +++ /dev/null @@ -1,1025 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` panel render component 1`] = ` -
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Creation time - - - - - - - - Generate - - -
-
- Name -
-
- -
-
-
- Source -
- -
-
- Type -
-
- - Test type - -
-
-
- Creation time -
-
-
- Invalid Date @ Invalid Date -
-
-
-
- State -
-
- - Created - -
-
-
- Generate -
-
- -
-
-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-`; - -exports[` panel render empty component 1`] = ` -
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - -
-
- - - Name - - - - - - Source - - - - - - - - Creation time - - - - - - - - Generate - - -
-
- -
-

- No reports to display -

- -
-
-
-
- Create a report definition, or share/download a report from a dashboard, saved search or visualization. -
- -
-
- -
-
-
-
-
-
-
-`; diff --git a/dashboards-reports/public/components/main/__tests__/__utils__/main_utils_test_utils.tsx b/dashboards-reports/public/components/main/__tests__/__utils__/main_utils_test_utils.tsx deleted file mode 100644 index 28e8e36b..00000000 --- a/dashboards-reports/public/components/main/__tests__/__utils__/main_utils_test_utils.tsx +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const reportTableMockResponse = [ - { - _id: '123456', - _index: 'test', - _score: 1, - _source: { - last_updated: 123456789, - query_url: 'test_query_url_value.com', - report_definition: { - delivery: { - delivery_type: 'OpenSearch Dashboards user', - delivery_params: { - opensearch_dashboards_recipients: [], - }, - }, - report_params: { - report_name: 'Test report table response', - description: 'description', - report_source: 'Dashboard', - core_params: { - base_url: 'test_base_url.com', - header: '', - footer: '', - report_format: 'pdf', - time_duration: 'PT30M', - window_height: 800, - window_width: 1200, - }, - }, - trigger: { - trigger_type: 'On demand', - }, - state: 'Created', - time_created: 123456780, - time_from: 123456780, - time_to: 123456799, - }, - }, - _type: 'doc', - }, -]; - -export const mockReportsTableItems = [ - { - id: '123456', - reportName: 'Test report table response', - type: 'On demand', - sender: '—', - opensearchDashboardsRecipients: '—', - emailRecipients: '—', - reportSource: 'Dashboard', - timeCreated: undefined, - state: undefined, - url: 'test_query_url_value.com', - format: 'pdf', - }, -]; - -export const reportDefinitionsTableMockResponse = [ - { - _index: 'report_definition', - _type: '_doc', - _id: '42MmKXUBDW-VXnk7pa6d', - _score: 1, - _source: { - report_definition: { - report_params: { - report_name: 'schedule definition', - report_source: 'Dashboard', - description: 'description', - core_params: { - base_url: 'test_base_url.com', - report_format: 'pdf', - header: '', - footer: '', - time_duration: 'PT30M', - window_width: 1200, - window_height: 800, - }, - }, - delivery: { - delivery_type: 'OpenSearch Dashboards user', - delivery_params: { opensearch_dashboards_recipients: [] }, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - enabled_time: 1602713178321, - schedule: { - period: 1, - interval: 'DAYS', - }, - schedule_type: 'Recurring', - enabled: false, - }, - }, - time_created: 1602713199604, - last_updated: 1602713211007, - status: 'Disabled', - }, - }, - }, -]; - -export const reportDefinitionsTableMockContent = [ - { - id: '42MmKXUBDW-VXnk7pa6d', - reportName: 'schedule definition', - type: 'Schedule', - owner: '—', - source: 'Dashboard', - baseUrl: 'test_base_url.com', - lastUpdated: 1602713211007, - details: 'Recurring', - status: 'Disabled', - }, -]; diff --git a/dashboards-reports/public/components/main/__tests__/main.test.tsx b/dashboards-reports/public/components/main/__tests__/main.test.tsx deleted file mode 100644 index 3142326e..00000000 --- a/dashboards-reports/public/components/main/__tests__/main.test.tsx +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { render } from '@testing-library/react'; -import { Main } from '../main'; -import httpClientMock from '../../../../test/httpMockClient'; -import { configure, mount } from 'enzyme'; -import Adapter from 'enzyme-adapter-react-16'; -import { act } from 'react-dom/test-utils'; - -function setBreadcrumbs(array: []) { - jest.fn(); -} - -describe('
panel', () => { - configure({ adapter: new Adapter() }); - test('render component', (done) => { - window = Object.create(window); - Object.defineProperty(window, 'location', { - configurable: true, - value: { - assign: jest.fn(), - href: 'reports-dashboards#/', - }, - }); - - const { container } = render( -
- ); - - expect(container.firstChild).toMatchSnapshot(); - done(); - }); - - test('render component after create success', async () => { - delete window.location; - - Object.defineProperty(window, 'location', { - configurable: true, - value: { - assign: jest.fn(), - href: 'reports-dashboards#/create=success', - }, - }); - - const { container } = render( -
- ); - - expect(container.firstChild).toMatchSnapshot(); - }); - - test('render component after edit success', async () => { - delete window.location; - - Object.defineProperty(window, 'location', { - configurable: true, - value: { - assign: jest.fn(), - href: 'reports-dashboards#/edit=success', - }, - }); - - const { container } = render( -
- ); - - expect(container.firstChild).toMatchSnapshot(); - }); - - test('render component after delete success', async () => { - delete window.location; - - Object.defineProperty(window, 'location', { - configurable: true, - value: { - assign: jest.fn(), - href: 'reports-dashboards#/delete=success', - }, - }); - - const { container } = render( -
- ); - - expect(container.firstChild).toMatchSnapshot(); - }) - - test('test refresh reports definitions button', async () => { - const promise = Promise.resolve(); - const data = [ - { - _id: 'abcdefg', - _source: { - query_url: '/app/visualize/edit/1234567890', - state: 'Created', - time_created: 123456789, - time_from: 123456789, - time_to: 1234567890, - report_definition: { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: 'http://localhost:5601', - report_format: 'png', - header: '', - footer: '', - time_duration: 'PT30M', - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: {}, - }, - }, - }, - }, - ]; - - httpClientMock.get = jest.fn().mockResolvedValue({ - data, - }); - - const component = mount( -
- ); - await act(() => promise); - - const generate = component.find('button').at(7); - generate.simulate('click'); - await act(() => promise); - }); - - test('test refresh reports table button', async () => { - const promise = Promise.resolve(); - const data = [ - { - _id: 'abcdefg', - _source: { - query_url: '/app/visualize/edit/1234567890', - state: 'Created', - time_created: 123456789, - time_from: 123456789, - time_to: 1234567890, - report_definition: { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: 'http://localhost:5601', - report_format: 'png', - header: '', - footer: '', - time_duration: 'PT30M', - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: {}, - }, - }, - }, - }, - ]; - - httpClientMock.get = jest.fn().mockResolvedValue({ - data, - }); - - const component = mount( -
- ); - await act(() => promise); - - const generate = component.find('button').at(0); - generate.simulate('click'); - await act(() => promise); - }); - - // TODO: mock catch() error response to contain status code - test.skip('test error toasts posted', async () => { - jest.spyOn(console, 'log').mockImplementation(() => {}); // silence console log error from main - const promise = Promise.resolve(); - - httpClientMock.get = jest.fn().mockResolvedValue({ - response: null, - }); - - const component = mount( -
- ); - const generate = component.find('button').at(7); - try { - generate.simulate('click'); - await act(() => promise); - } catch (e) { - await act(() => promise); - } - }); -}); diff --git a/dashboards-reports/public/components/main/__tests__/main_utils.test.tsx b/dashboards-reports/public/components/main/__tests__/main_utils.test.tsx deleted file mode 100644 index 8f852a45..00000000 --- a/dashboards-reports/public/components/main/__tests__/main_utils.test.tsx +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { - humanReadableDate, - extractFilename, - extractFileFormat, - getFileFormatPrefix, - addReportsTableContent, - addReportDefinitionsTableContent, - removeDuplicatePdfFileFormat, - readStreamToFile, - generateReportFromDefinitionId, - generateReportById, -} from '../main_utils'; -import { - reportDefinitionsTableMockResponse, - mockReportsTableItems, - reportTableMockResponse, - reportDefinitionsTableMockContent, -} from './__utils__/main_utils_test_utils'; -import sinon from 'sinon'; -import httpClientMock from '../../../../test/httpMockClient'; - -describe('main_utils tests', () => { - global.URL.createObjectURL = jest.fn(); - let mockElement = document.createElement('a'); - mockElement.download = 'string'; - mockElement.click = function name() {}; - sinon.stub(document, 'createElement').returns(mockElement); - - test('test humanReadableDate', () => { - const readableDate = new Date(2018, 11, 24, 10, 33, 30); - const humanReadable = humanReadableDate(readableDate); - - expect(humanReadable).toBe('Mon Dec 24 2018 @ 10:33:30 AM'); - }); - - test('test extractFileName', () => { - const fullFile = 'test_file_name_extracted_correctly.pdf'; - const fileName = extractFilename(fullFile); - - expect(fileName).toBe('test_file_name_extracted_correctly'); - }); - - test('test extractFileFormat', () => { - const fullFile = 'test_file_format_extracted_correctly.png'; - const fileFormat = extractFileFormat(fullFile); - - expect(fileFormat).toBe('png'); - }); - - test('test getFileFormatPrefix', () => { - const fileFormat = 'pdf'; - const fileFormatPrefix = getFileFormatPrefix(fileFormat); - - expect(fileFormatPrefix).toBe('data:pdf;base64,'); - }); - - test('test addReportsTableContent', () => { - const reportsTableItems = addReportsTableContent(reportTableMockResponse); - - expect(reportsTableItems).toStrictEqual(mockReportsTableItems); - }); - - test('test addReportDefinitionsTableContent', () => { - const reportDefinitionsTableItems = addReportDefinitionsTableContent( - reportDefinitionsTableMockResponse - ); - - expect(reportDefinitionsTableItems).toStrictEqual( - reportDefinitionsTableMockContent - ); - }); - - test('test removeDuplicatePdfFileFormat', () => { - const duplicateFormat = 'test_duplicate_remove.pdf.pdf'; - const duplicateRemoved = removeDuplicatePdfFileFormat(duplicateFormat); - - expect(duplicateRemoved).toBe('test_duplicate_remove.pdf'); - }); - - test('test readStreamToFile csv compile', () => { - const stream = - 'category,customer_gender\n' + - 'c1,Male\n' + - 'c2,Male\n' + - 'c3,Male\n' + - 'c4,Male\n' + - 'c5,Male'; - - const fileFormat = 'csv'; - const fileName = 'test_data_report.csv'; - readStreamToFile(stream, fileFormat, fileName); - }); - - test('test readStreamToFile pdf compile', () => { - const stream = 'data:pdf;base64,zxvniaorbguw40absdoanlsdf'; - const fileFormat = 'pdf'; - const fileName = 'test_pdf_report.pdf'; - readStreamToFile(stream, fileFormat, fileName); - }); - - test('test generateReport compile', () => { - const reportDefinitionId = '1'; - generateReportFromDefinitionId(reportDefinitionId, httpClientMock); - }); - - test('test generateReportById compile', () => { - const reportId = '1'; - const handleSuccessToast = jest.fn(); - const handleErrorToast = jest.fn(); - generateReportById( - reportId, - httpClientMock, - handleSuccessToast, - handleErrorToast - ); - }); - - test('test generateReportById timeout error handling', async () => { - expect.assertions(1); - const reportId = '1'; - const handleSuccessToast = jest.fn(); - const handleErrorToast = jest.fn(); - const handlePermissionsMissingToast = jest.fn(); - - httpClientMock.get.mockReturnValue( - Promise.reject({ body: { statusCode: 503 } }) - ); - - await generateReportById( - reportId, - httpClientMock, - handleSuccessToast, - handleErrorToast, - handlePermissionsMissingToast - ); - expect(handleErrorToast).toHaveBeenCalledWith( - 'Error generating report.', - 'Timed out generating report ID 1. Try again later.' - ); - }); -}); diff --git a/dashboards-reports/public/components/main/__tests__/report_definitions_table.test.tsx b/dashboards-reports/public/components/main/__tests__/report_definitions_table.test.tsx deleted file mode 100644 index c6ff2d63..00000000 --- a/dashboards-reports/public/components/main/__tests__/report_definitions_table.test.tsx +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { render } from '@testing-library/react'; -import { ReportDefinitions } from '../report_definitions_table'; -import { configure, mount } from 'enzyme'; -import Adapter from 'enzyme-adapter-react-16'; - -const pagination = { - initialPageSize: 10, - pageSizeOptions: [8, 10, 13], -}; - -describe(' panel', () => { - configure({ adapter: new Adapter() }); - test('render component', () => { - let reportDefinitionsTableContent = [ - { - reportName: 'test report name', - type: 'Download', - owner: 'davidcui', - source: 'Dashboard', - lastUpdated: 'test updated time', - details: '', - status: 'Created', - }, - { - reportName: 'test report name 2', - type: 'Download', - owner: 'davidcui', - source: 'Dashboard', - lastUpdated: 'test updated time', - details: '', - status: 'Created', - }, - ]; - const { container } = render( - - ); - expect(container.firstChild).toMatchSnapshot(); - }); - - test('render empty table', () => { - const { container } = render( - - ); - expect(container.firstChild).toMatchSnapshot(); - }); - - test('test click on report definition row', async () => { - window = Object.create(window); - Object.defineProperty(window, 'location', { - configurable: true, - value: { - assign: jest.fn(), - }, - }); - let promise = Promise.resolve(); - let reportDefinitionsTableContent = [ - { - reportName: 'test report name', - type: 'Download', - owner: 'davidcui', - source: 'Dashboard', - lastUpdated: 'test updated time', - details: '', - status: 'Created', - }, - { - reportName: 'test report name 2', - type: 'Download', - owner: 'davidcui', - source: 'Dashboard', - lastUpdated: 'test updated time', - details: '', - status: 'Created', - }, - ]; - - const component = mount( - - ); - - const nameLink = component.find('button').at(3); - nameLink.simulate('click'); - }); -}); diff --git a/dashboards-reports/public/components/main/__tests__/reports_table.test.tsx b/dashboards-reports/public/components/main/__tests__/reports_table.test.tsx deleted file mode 100644 index 0ec69731..00000000 --- a/dashboards-reports/public/components/main/__tests__/reports_table.test.tsx +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { render } from '@testing-library/react'; -import { ReportsTable } from '../reports_table'; -import httpClientMock from '../../../../test/httpMockClient'; -import { configure, mount } from 'enzyme'; -import Adapter from 'enzyme-adapter-react-16'; -import { act } from 'react-dom/test-utils'; - -const pagination = { - initialPageSize: 10, - pageSizeOptions: [8, 10, 13], -}; - -describe(' panel', () => { - configure({ adapter: new Adapter() }); - test('render component', () => { - let reportsTableItems = [ - { - id: '1', - reportName: 'test report table item', - type: 'Test type', - sender: 'N/A', - recipients: 'N/A', - reportSource: 'Test report source', - lastUpdated: 'test updated time', - state: 'Created', - url: 'Test url', - }, - ]; - const { container } = render( - - ); - expect(container.firstChild).toMatchSnapshot(); - }); - - test('render empty component', async () => { - const { container } = render( - - ); - expect(container.firstChild).toMatchSnapshot(); - }); - - test('click on generate button', async () => { - const promise = Promise.resolve(); - let reportsTableItems = [ - { - id: '1', - reportName: 'test report table item', - type: 'Test type', - sender: 'N/A', - recipients: 'N/A', - reportSource: 'Test report source', - lastUpdated: 'test updated time', - state: 'Created', - url: 'Test url', - }, - ]; - - const component = mount( - - ); - - const generateClick = component.find('button').at(6); - // console.log(generateClick.debug()); - generateClick.simulate('click'); - await act(() => promise); - }); -}); diff --git a/dashboards-reports/public/components/main/index.ts b/dashboards-reports/public/components/main/index.ts deleted file mode 100644 index 7dd7bc03..00000000 --- a/dashboards-reports/public/components/main/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { Main } from './main'; -export { ReportDetails } from './report_details/report_details'; diff --git a/dashboards-reports/public/components/main/loading_modal/index.ts b/dashboards-reports/public/components/main/loading_modal/index.ts deleted file mode 100644 index 2f6c609b..00000000 --- a/dashboards-reports/public/components/main/loading_modal/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - - export { GenerateReportLoadingModal } from './loading_modal'; \ No newline at end of file diff --git a/dashboards-reports/public/components/main/loading_modal/loading_modal.tsx b/dashboards-reports/public/components/main/loading_modal/loading_modal.tsx deleted file mode 100644 index 61c53968..00000000 --- a/dashboards-reports/public/components/main/loading_modal/loading_modal.tsx +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { - EuiOverlayMask, - EuiModal, - EuiModalHeader, - EuiTitle, - EuiText, - EuiModalBody, - EuiSpacer, - EuiFlexGroup, - EuiFlexItem, - EuiLoadingSpinner, - EuiButton, -} from '@elastic/eui'; -import { i18n } from '@osd/i18n'; -import React, { useState } from 'react'; - -export function GenerateReportLoadingModal(props: { setShowLoading: any }) { - const { setShowLoading } = props; - - const [isModalVisible, setIsModalVisible] = useState(true); - - const closeModal = () => { - setIsModalVisible(false); - setShowLoading(false); - }; - const showModal = () => setIsModalVisible(true); - - return ( -
- - - - - -

- {i18n.translate( - 'opensearch.reports.loading.generatingReport', - { defaultMessage: 'Generating report' } - )} -

-
-
-
- - - {i18n.translate('opensearch.reports.loading.preparingYourFile', { - defaultMessage: 'Preparing your file for download.', - })} - - - {i18n.translate('opensearch.reports.loading.youCanClose', { - defaultMessage: - 'Please keep this dialog open while report is being generated.', - })} - - - - - - - - - -
-
-
- ); -} diff --git a/dashboards-reports/public/components/main/main.tsx b/dashboards-reports/public/components/main/main.tsx deleted file mode 100644 index bfbb8cb9..00000000 --- a/dashboards-reports/public/components/main/main.tsx +++ /dev/null @@ -1,367 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { Fragment, useState, useEffect } from 'react'; -import { i18n } from '@osd/i18n'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiButton, - EuiTitle, - // @ts-ignore - EuiHorizontalRule, - EuiSpacer, - EuiPanel, - EuiGlobalToastList, -} from '@elastic/eui'; -import { ReportsTable } from './reports_table'; -import { ReportDefinitions } from './report_definitions_table'; -import { - addReportsTableContent, - addReportDefinitionsTableContent, -} from './main_utils'; -import CSS from 'csstype'; -import { - permissionsMissingToast, - permissionsMissingActions, -} from '../utils/utils'; - -const reportCountStyles: CSS.Properties = { - color: 'gray', - display: 'inline', -}; - -export function Main(props) { - const [reportsTableContent, setReportsTableContent] = useState([]); - const [ - reportDefinitionsTableContent, - setReportDefinitionsTableContent, - ] = useState([]); - const [toasts, setToasts] = useState([]); - - const addPermissionsMissingDownloadToastHandler = () => { - const toast = permissionsMissingToast( - permissionsMissingActions.GENERATING_REPORT - ); - setToasts(toasts.concat(toast)); - }; - - const handlePermissionsMissingDownloadToast = () => { - addPermissionsMissingDownloadToastHandler(); - }; - - const addReportsTableContentErrorToastHandler = (errorType: string) => { - let toast = {}; - if (errorType === 'permissions') { - toast = permissionsMissingToast( - permissionsMissingActions.LOADING_REPORTS_TABLE - ); - } else if (errorType === 'API') { - toast = { - title: i18n.translate( - 'opensearch.reports.main.errorGeneratingReportsTable.', - { defaultMessage: 'Error generating reports table.' } - ), - color: 'danger', - iconType: 'alert', - id: 'reportsTableErrorToast', - }; - } - setToasts(toasts.concat(toast)); - }; - - const handleReportsTableErrorToast = (errorType: string) => { - addReportsTableContentErrorToastHandler(errorType); - }; - - const addReportDefinitionsTableErrorToastHandler = (errorType: string) => { - let toast = {}; - if (errorType === 'permissions') { - toast = permissionsMissingToast( - permissionsMissingActions.LOADING_DEFINITIONS_TABLE - ); - } else if (errorType === 'API') { - toast = { - title: i18n.translate( - 'opensearch.reports.main.errorGeneratingReportDefinitionsTable.', - { defaultMessage: 'Error generating report definitions table.' } - ), - color: 'danger', - iconType: 'alert', - id: 'reportDefinitionsTableErrorToast', - }; - } - setToasts(toasts.concat(toast)); - }; - - const handleReportDefinitionsTableErrorToast = (errorType: string) => { - addReportDefinitionsTableErrorToastHandler(errorType); - }; - - const addErrorOnDemandDownloadToastHandler = ( - title = i18n.translate('opensearch.reports.main.errorDownloadingReport', { - defaultMessage: 'Error downloading report.', - }), - text = '' - ) => { - const errorToast = { - title, - text, - color: 'danger', - iconType: 'alert', - id: 'onDemandDownloadErrorToast', - }; - setToasts(toasts.concat(errorToast)); - }; - - const handleOnDemandDownloadErrorToast = (title?: string, text?: string) => { - addErrorOnDemandDownloadToastHandler(title, text); - }; - - const addSuccessOnDemandDownloadToastHandler = () => { - const successToast = { - title: i18n.translate( - 'opensearch.reports.main.successfullyDownloadedReport', - { defaultMessage: 'Successfully downloaded report.' } - ), - color: 'success', - iconType: 'check', - id: 'onDemandDownloadSuccessToast', - }; - setToasts(toasts.concat(successToast)); - }; - - const handleOnDemandDownloadSuccessToast = () => { - addSuccessOnDemandDownloadToastHandler(); - }; - - const addCreateReportDefinitionSuccessToastHandler = () => { - const successToast = { - title: i18n.translate( - 'opensearch.reports.main.successfullyCreatedReportDefinition', - { defaultMessage: 'Successfully created report definition.' } - ), - color: 'success', - iconType: 'check', - id: 'createReportDefinitionSuccessToast', - }; - setToasts(toasts.concat(successToast)); - }; - - const handleCreateReportDefinitionSuccessToast = () => { - addCreateReportDefinitionSuccessToastHandler(); - }; - - const addEditReportDefinitionSuccessToastHandler = () => { - const successToast = { - title: i18n.translate( - 'opensearch.reports.main.successfullyUpdatedReportDefinition', - { defaultMessage: 'Successfully updated report definition.' } - ), - color: 'success', - iconType: 'check', - id: 'editReportDefinitionSuccessToast', - }; - setToasts(toasts.concat(successToast)); - }; - - const handleEditReportDefinitionSuccessToast = () => { - addEditReportDefinitionSuccessToastHandler(); - }; - - const addDeleteReportDefinitionSuccessToastHandler = () => { - const successToast = { - title: i18n.translate( - 'opensearch.reports.main.successfullyDeletedReportDefinition', - { defaultMessage: 'Successfully deleted report definition.' } - ), - color: 'success', - iconType: 'check', - id: 'deleteReportDefinitionSuccessToast', - }; - setToasts(toasts.concat(successToast)); - }; - - const handleDeleteReportDefinitionSuccessToast = () => { - addDeleteReportDefinitionSuccessToastHandler(); - }; - - const removeToast = (removedToast) => { - setToasts(toasts.filter((toast) => toast.id !== removedToast.id)); - }; - - const pagination = { - initialPageSize: 10, - pageSizeOptions: [5, 10, 20], - }; - - useEffect(() => { - props.setBreadcrumbs([ - { - text: i18n.translate('opensearch.reports.main.title.reporting', { - defaultMessage: 'Reporting', - }), - href: '#', - }, - ]); - refreshReportsTable(); - refreshReportsDefinitionsTable(); - - if (window.location.href.includes('create=success')) { - handleCreateReportDefinitionSuccessToast(); - // refresh might not fetch the latest changes when coming from create or edit page - // workaround to wait 1 second and refresh again - setTimeout(() => { - refreshReportsTable(); - refreshReportsDefinitionsTable(); - }, 1000); - } else if (window.location.href.includes('edit=success')) { - handleEditReportDefinitionSuccessToast(); - setTimeout(() => { - refreshReportsTable(); - refreshReportsDefinitionsTable(); - }, 1000); - } else if (window.location.href.includes('delete=success')) { - handleDeleteReportDefinitionSuccessToast(); - setTimeout(() => { - refreshReportsTable(); - refreshReportsDefinitionsTable(); - }, 1000); - } - window.location.href = 'reports-dashboards#/'; - }, []); - - const refreshReportsTable = async () => { - const { httpClient } = props; - await httpClient - .get('../api/reporting/reports') - .then((response) => { - setReportsTableContent(addReportsTableContent(response.data)); - }) - .catch((error) => { - console.log('error when fetching all reports: ', error); - // permission denied error - if (error.body.statusCode === 403) { - handleReportsTableErrorToast('permissions'); - } else { - handleReportsTableErrorToast('API'); - } - }); - }; - - const refreshReportsDefinitionsTable = async () => { - const { httpClient } = props; - await httpClient - .get('../api/reporting/reportDefinitions') - .then((response) => { - setReportDefinitionsTableContent( - addReportDefinitionsTableContent(response.data) - ); - }) - .catch((error) => { - console.log('error when fetching all report definitions: ', error); - if (error.body.statusCode === 403) { - handleReportDefinitionsTableErrorToast('permissions'); - } else { - handleReportDefinitionsTableErrorToast('API'); - } - }); - }; - - return ( -
- - - - -

- {i18n.translate('opensearch.reports.main.title.reports', { - defaultMessage: 'Reports', - })}{' '} -

({reportsTableContent.length})

-

-
-
- - - {i18n.translate( - 'opensearch.reports.main.reports.button.refresh', - { defaultMessage: 'Refresh' } - )} - - -
- - -
- - - - - -

- {i18n.translate( - 'opensearch.reports.main.title.reportDefinitions', - { defaultMessage: 'Report definitions' } - )} -

- {' '} - ({reportDefinitionsTableContent.length}) -

-

-
-
- - - {i18n.translate( - 'opensearch.reports.main.reportDefinitions.button.refresh', - { defaultMessage: 'Refresh' } - )} - - - - { - window.location.assign('reports-dashboards#/create'); - }} - id={'createReportHomepageButton'} - > - {i18n.translate( - 'opensearch.reports.main.reportDefinitions.button.create', - { defaultMessage: 'Create' } - )} - - -
- - -
- -
- ); -} diff --git a/dashboards-reports/public/components/main/main_utils.tsx b/dashboards-reports/public/components/main/main_utils.tsx deleted file mode 100644 index f4b32bbf..00000000 --- a/dashboards-reports/public/components/main/main_utils.tsx +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { i18n } from '@osd/i18n'; -import 'babel-polyfill'; -import { HttpSetup } from '../../../../../src/core/public'; -import { uiSettingsService } from '../utils/settings_service'; -import { GENERATE_REPORT_PARAM } from '../visual_report/constants'; - -export const getAvailableNotificationsChannels = (configList: any) => { - let availableChannels = []; - for (let i = 0; i < configList.length; ++i) { - let channelEntry = {}; - channelEntry = { - label: configList[i].config.name, - id: configList[i].config_id, - }; - availableChannels.push(channelEntry); - } - return availableChannels; -}; - -type fileFormatsOptions = { - [key: string]: string; -}; - -export const fileFormatsUpper: fileFormatsOptions = { - csv: 'CSV', - pdf: 'PDF', - png: 'PNG', -}; - -export const humanReadableDate = (date: string | number | Date) => { - let readableDate = new Date(date); - return ( - readableDate.toDateString() + ' @ ' + readableDate.toLocaleTimeString() - ); -}; - -export const extractFilename = (filename: string) => { - return filename.substring(0, filename.length - 4); -}; - -export const extractFileFormat = (filename: string) => { - const fileFormat = filename; - return fileFormat.substring(filename.length - 3, filename.length); -}; - -export const getFileFormatPrefix = (fileFormat: string) => { - var fileFormatPrefix = 'data:' + fileFormat + ';base64,'; - return fileFormatPrefix; -}; - -export const addReportsTableContent = (data: string | any[]) => { - let reportsTableItems = []; - for (let index = 0; index < data.length; ++index) { - let item = data[index]; - let report = item._source; - let reportDefinition = report.report_definition; - let reportParams = reportDefinition.report_params; - let trigger = reportDefinition.trigger; - - let reportsTableEntry = { - id: item._id, - reportName: reportParams.report_name, - type: trigger.trigger_type, - sender: `\u2014`, - opensearchDashboardsRecipients: `\u2014`, - emailRecipients: `\u2014`, - reportSource: reportParams.report_source, - //TODO: wrong name - timeCreated: report.time_created, - state: report.state, - url: report.query_url, - format: reportParams.core_params.report_format, - }; - reportsTableItems.push(reportsTableEntry); - } - return reportsTableItems; -}; - -export const addReportDefinitionsTableContent = (data: any) => { - let reportDefinitionsTableItems = []; - for (let index = 0; index < data.length; ++index) { - let item = data[index]; - let reportDefinition = item._source.report_definition; - let reportParams = reportDefinition.report_params; - let trigger = reportDefinition.trigger; - let triggerParams = trigger.trigger_params; - let reportDefinitionsTableEntry = { - id: item._id, - reportName: reportParams.report_name, - type: trigger.trigger_type, - owner: `\u2014`, // Todo: replace - source: reportParams.report_source, - baseUrl: reportParams.core_params.base_url, - lastUpdated: reportDefinition.last_updated, - details: - trigger.trigger_type === 'On demand' - ? `\u2014` - : triggerParams.schedule_type, // e.g. recurring, cron based - status: reportDefinition.status, - }; - reportDefinitionsTableItems.push(reportDefinitionsTableEntry); - } - return reportDefinitionsTableItems; -}; - -export const removeDuplicatePdfFileFormat = (filename: string) => { - return filename.substring(0, filename.length - 4); -}; - -export const readDataReportToFile = async ( - stream: string, - fileFormat: string, - fileName: string -) => { - const blob = new Blob([stream]); - const url = URL.createObjectURL(blob); - let link = document.createElement('a'); - link.setAttribute('href', url); - link.setAttribute('download', fileName); - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); -}; - -export const readStreamToFile = async ( - stream: string, - fileFormat: string, - fileName: string -) => { - let link = document.createElement('a'); - if (fileName.includes('csv')) { - readDataReportToFile(stream, fileFormat, fileName); - return; - } - let fileFormatPrefix = getFileFormatPrefix(fileFormat); - let url = fileFormatPrefix + stream; - if (typeof link.download !== 'string') { - window.open(url, '_blank'); - return; - } - link.download = fileName; - link.href = url; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); -}; - -export const generateReportFromDefinitionId = async ( - reportDefinitionId: string, - httpClient: HttpSetup -) => { - let status = false; - let permissionsError = false; - await httpClient - .post(`../api/reporting/generateReport/${reportDefinitionId}`, { - headers: { - 'Content-Type': 'application/json', - }, - query: uiSettingsService.getSearchParams(), - }) - .then(async (response: any) => { - // for emailing a report, this API response doesn't have response body - if (!response) return; - const fileFormat = extractFileFormat(response['filename']); - const fileName = response['filename']; - if (fileFormat === 'csv') { - await readStreamToFile(await response['data'], fileFormat, fileName); - status = true; - return; - } - - // generate reports in browser is memory intensive, do it in a new process by removing referrer - const a = document.createElement('a'); - a.href = - window.location.origin + - `${response.queryUrl}&${GENERATE_REPORT_PARAM}=${response.reportId}`; - a.target = '_blank'; - a.rel = 'noreferrer'; - a.click(); - status = true; - }) - .catch((error) => { - console.log('error on generating report:', error); - if (error.body.statusCode === 403) { - permissionsError = true; - } - status = false; - }); - return { - status: status, - permissionsError: permissionsError, - }; -}; - -export const generateReportById = async ( - reportId: string, - httpClient: HttpSetup, - handleSuccessToast, - handleErrorToast, - handlePermissionsMissingToast -) => { - await httpClient - .get(`../api/reporting/generateReport/${reportId}`, { - query: uiSettingsService.getSearchParams(), - }) - .then(async (response) => { - //TODO: duplicate code, extract to be a function that can reuse. e.g. handleResponse(response) - const fileFormat = extractFileFormat(response['filename']); - const fileName = response['filename']; - if (fileFormat === 'csv') { - await readStreamToFile(await response['data'], fileFormat, fileName); - handleSuccessToast(); - return response; - } - - // generate reports in browser is memory intensive, do it in a new process by removing referrer - const a = document.createElement('a'); - a.href = - window.location.origin + - `${response.queryUrl}&${GENERATE_REPORT_PARAM}=${reportId}`; - a.target = '_blank'; - a.rel = 'noreferrer'; - a.click(); - }) - .catch((error) => { - console.log('error on generating report by id:', error); - if (error.body.statusCode === 403) { - handlePermissionsMissingToast(); - } else if (error.body.statusCode === 503) { - handleErrorToast( - i18n.translate('opensearch.reports.utils.errorTitle', { - defaultMessage: 'Error generating report.', - }), - i18n.translate('opensearch.reports.utils.errorText', { - defaultMessage: - 'Timed out generating report ID {reportId}. Try again later.', - values: { reportId: reportId }, - description: 'Error number toast', - }) - ); - } else { - handleErrorToast(); - } - }); -}; diff --git a/dashboards-reports/public/components/main/report_definition_details/__tests__/__snapshots__/report_definition_details.test.tsx.snap b/dashboards-reports/public/components/main/report_definition_details/__tests__/__snapshots__/report_definition_details.test.tsx.snap deleted file mode 100644 index e1b1f857..00000000 --- a/dashboards-reports/public/components/main/report_definition_details/__tests__/__snapshots__/report_definition_details.test.tsx.snap +++ /dev/null @@ -1,1233 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` panel render 5 hours recurring definition details 1`] = ` -
-
-

- Report definition details -

-
-
-
-
-
-
-

-

-
-
-
-
- -
-
- -
-
- -
-
-
-
-

- Report settings -

-
-
-
-
-
- Name -
-
-
-
-
-
-
- Description -
-
-
-
-
-
-
- Created -
-
-
-
-
-
-
- Last updated -
-
-
-
-
-
-
- -
-
-
- Time period -
-
- Last -
-
-
-
-
-
- File format -
-
- -
-
-
-
-
-
-
-
-
-
- Report header -
-
-
-
-
-
-
- Report footer -
-
-
-
-
-
-
-
-
-
-
-
- Report trigger -
-
-
-
-
-
-
- Schedule details -
-
-
-
-
-
-
- Status -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-`; - -exports[` panel render disabled daily definition, click 1`] = ` -
-
-

- Report definition details -

-
-
-
-
-
-
-

-

-
-
-
-
- -
-
- -
-
- -
-
-
-
-

- Report settings -

-
-
-
-
-
- Name -
-
-
-
-
-
-
- Description -
-
-
-
-
-
-
- Created -
-
-
-
-
-
-
- Last updated -
-
-
-
-
-
-
- -
-
-
- Time period -
-
- Last -
-
-
-
-
-
- File format -
-
- -
-
-
-
-
-
-
-
-
-
- Report header -
-
-
-
-
-
-
- Report footer -
-
-
-
-
-
-
-
-
-
-
-
- Report trigger -
-
-
-
-
-
-
- Schedule details -
-
-
-
-
-
-
- Status -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-`; - -exports[` panel render on demand definition details 1`] = ` -
-
-

- Report definition details -

-
-
-
-
-
-
-

-

-
-
-
-
- -
-
- -
-
- -
-
-
-
-

- Report settings -

-
-
-
-
-
- Name -
-
-
-
-
-
-
- Description -
-
-
-
-
-
-
- Created -
-
-
-
-
-
-
- Last updated -
-
-
-
-
-
-
- -
-
-
- Time period -
-
- Last -
-
-
-
-
-
- File format -
-
- -
-
-
-
-
-
-
-
-
-
- Report header -
-
-
-
-
-
-
- Report footer -
-
-
-
-
-
-
-
-
-
-
-
- Report trigger -
-
-
-
-
-
-
- Schedule details -
-
-
-
-
-
-
- Status -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-`; diff --git a/dashboards-reports/public/components/main/report_definition_details/__tests__/report_definition_details.test.tsx b/dashboards-reports/public/components/main/report_definition_details/__tests__/report_definition_details.test.tsx deleted file mode 100644 index 7e26cd63..00000000 --- a/dashboards-reports/public/components/main/report_definition_details/__tests__/report_definition_details.test.tsx +++ /dev/null @@ -1,420 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { act, render } from '@testing-library/react'; -import { ReportDefinitionDetails } from '../report_definition_details'; -import httpClientMock from '../../../../../test/httpMockClient'; -import 'babel-polyfill'; -import { configure, mount } from 'enzyme'; -import Adapter from 'enzyme-adapter-react-16'; - -function setBreadcrumbs(array: []) { - jest.fn(); -} - -describe(' panel', () => { - let propsMock = { - match: { - params: { - reportDefinitionId: jest.fn(), - }, - }, - }; - - const match = { - params: { - reportDefinitionId: '1', - }, - }; - beforeEach(() => { - jest.clearAllMocks(); - }); - - configure({ adapter: new Adapter() }); - test('render on demand definition details', async () => { - const promise = Promise.resolve(); - const report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'On demand', - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - config_list: [] - }); - - const { container } = render( - - ); - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('render 5 hours recurring definition details', async () => { - const promise = Promise.resolve(); - const report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - schedule: { - interval: { - period: 5, - unit: 'HOURS', - timezone: 'PST8PDT', - }, - }, - enabled_time: 1114939203, - enabled: true, - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - config_list: [] - }); - - const { container } = render( - - ); - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('render disabled daily definition, click', async () => { - let promise = Promise.resolve(); - const report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - schedule: { - interval: { - period: 1, - unit: 'DAYS', - timezone: 'PST8PDT', - }, - }, - enabled_time: 1114939203, - enabled: false, - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - config_list: [] - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('simulate click on generateReport', async () => { - let promise = Promise.resolve(); - const report_definition = { - report_params: { - report_name: null, - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'On demand', - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - config_list: [] - }); - - const component = mount( - - ); - await act(() => promise); - component.update(); - const statusButton = component.find('button').at(1); - - statusButton.simulate('click'); - await act(() => promise); - }); - - test('simulate click on delete', async () => { - let promise = Promise.resolve(); - const report_definition = { - report_params: { - report_name: null, - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - schedule: { - interval: { - period: 1, - unit: 'DAYS', - timezone: 'PST8PDT', - }, - }, - enabled_time: 1114939203, - enabled: false, - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - config_list: [] - }); - - const component = mount( - - ); - - const statusButton = component.find('button').at(0); - statusButton.update(); - statusButton.simulate('click'); - - await act(() => promise); - }); - - test('simulate click to enable', async () => { - let promise = Promise.resolve(); - const report_definition = { - status: 'Disabled', - report_params: { - report_name: 'test click on enable disable', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - schedule: { - interval: { - period: 1, - unit: 'DAYS', - timezone: 'PST8PDT', - }, - }, - enabled_time: 1114939203, - enabled: false, - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - config_list: [] - }); - - httpClientMock.put = jest.fn().mockResolvedValue({}); - - const component = mount( - - ); - await act(() => promise); - component.update(); - const statusButton = component.find('button').at(1); - - statusButton.simulate('click'); - await act(() => promise); - }); - - test('simulate click to disable', async () => { - let promise = Promise.resolve(); - const report_definition = { - status: 'Active', - report_params: { - report_name: 'test click on enable disable', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - schedule: { - interval: { - period: 1, - unit: 'DAYS', - timezone: 'PST8PDT', - }, - }, - enabled_time: 1114939203, - enabled: true, - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - config_list: [] - }); - - httpClientMock.put = jest.fn().mockResolvedValue({}); - - const component = mount( - - ); - await act(() => promise); - component.update(); - const statusButton = component.find('button').at(1); - - statusButton.simulate('click'); - await act(() => promise); - }); -}); diff --git a/dashboards-reports/public/components/main/report_definition_details/report_definition_details.tsx b/dashboards-reports/public/components/main/report_definition_details/report_definition_details.tsx deleted file mode 100644 index 2d44dfd2..00000000 --- a/dashboards-reports/public/components/main/report_definition_details/report_definition_details.tsx +++ /dev/null @@ -1,837 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useState } from 'react'; -import { i18n } from '@osd/i18n'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiPage, - EuiPageHeader, - EuiTitle, - EuiPageBody, - EuiPageContent, - EuiHorizontalRule, - EuiSpacer, - EuiPageHeaderSection, - EuiButton, - EuiIcon, - EuiLink, - EuiGlobalToastList, - EuiOverlayMask, - EuiConfirmModal, -} from '@elastic/eui'; -import { - ReportDetailsComponent, - formatEmails, - trimAndRenderAsText, -} from '../report_details/report_details'; -import { - fileFormatsUpper, - generateReportFromDefinitionId, -} from '../main_utils'; -import { ReportDefinitionSchemaType } from '../../../../server/model'; -import moment from 'moment'; -import { - permissionsMissingToast, - permissionsMissingActions, -} from '../../utils/utils'; -import { GenerateReportLoadingModal } from '../loading_modal'; - -const ON_DEMAND = 'On demand'; - -interface ReportDefinitionDetails { - name: string; - description: string; - created: string; - lastUpdated: string; - source: string; - timePeriod: string; - fileFormat: string; - status: string | undefined; - reportHeader: string; - reportFooter: string; - triggerType: string; - scheduleDetails: string; - baseUrl: string; -} - -export function ReportDefinitionDetails(props: { match?: any; setBreadcrumbs?: any; httpClient?: any; }) { - const [reportDefinitionDetails, setReportDefinitionDetails] = useState({ - name: '', - description: '', - created: '', - lastUpdated: '', - source: '', - timePeriod: '', - fileFormat: '', - status: '', - reportHeader: '', - reportFooter: '', - triggerType: '', - scheduleDetails: '', - baseUrl: '' - }); - const [ - reportDefinitionRawResponse, - setReportDefinitionRawResponse, - ] = useState({}); - const [toasts, setToasts] = useState([]); - const [showDeleteModal, setShowDeleteModal] = useState(false); - const [showLoading, setShowLoading] = useState(false); - const reportDefinitionId = props.match['params']['reportDefinitionId']; - - const handleLoading = (e: boolean | ((prevState: boolean) => boolean)) => { - setShowLoading(e); - }; - - const handleShowDeleteModal = (e: boolean | ((prevState: boolean) => boolean)) => { - setShowDeleteModal(e); - }; - - const addPermissionsMissingStatusChangeToastHandler = () => { - const toast = permissionsMissingToast( - permissionsMissingActions.CHANGE_SCHEDULE_STATUS - ); - // @ts-ignore - setToasts(toasts.concat(toast)); - }; - - const addPermissionsMissingDeleteToastHandler = () => { - const toast = permissionsMissingToast( - permissionsMissingActions.DELETE_REPORT_DEFINITION - ); - // @ts-ignore - setToasts(toasts.concat(toast)); - }; - - const handlePermissionsMissingDeleteToast = () => { - addPermissionsMissingDeleteToastHandler(); - }; - - const addPermissionsMissingGenerateReportToastHandler = () => { - const toast = permissionsMissingToast( - permissionsMissingActions.GENERATING_REPORT - ); - // @ts-ignore - setToasts(toasts.concat(toast)); - }; - - const addErrorLoadingDetailsToastHandler = () => { - const errorToast = { - title: i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.toast.errorLoadingReportDefinitionDetails. ', - { defaultMessage: 'Error loading report definition details.' } - ), - color: 'danger', - iconType: 'alert', - id: 'reportDefinitionDetailsErrorToast', - }; - // @ts-ignore - setToasts(toasts.concat(errorToast)); - }; - - const handleDetailsErrorToast = () => { - addErrorLoadingDetailsToastHandler(); - }; - - const addSuccessGeneratingReportToastHandler = () => { - const successToast = { - title: i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.toast.successfullyGeneratedReport. ', - { defaultMessage: 'Successfully generated report.' } - ), - color: 'success', - iconType: 'check', - id: 'generateReportSuccessToast', - }; - // @ts-ignore - setToasts(toasts.concat(successToast)); - }; - - const handleSuccessGeneratingReportToast = () => { - addSuccessGeneratingReportToastHandler(); - }; - - const addErrorGeneratingReportToastHandler = () => { - const errorToast = { - title: i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.toast.errorGeneratingReport. ', - { defaultMessage: 'Error generating report.' } - ), - color: 'danger', - iconType: 'alert', - id: 'generateReportErrorToast', - }; - // @ts-ignore - setToasts(toasts.concat(errorToast)); - }; - - const handleErrorGeneratingReportToast = (errorType: string) => { - if (errorType === 'permissions') { - addPermissionsMissingGenerateReportToastHandler(); - } else if (errorType === 'API') { - addErrorGeneratingReportToastHandler(); - } - }; - - const addSuccessEnablingScheduleToastHandler = () => { - const successToast = { - title: i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.toast.successfullyEnabledSchedule. ', - { defaultMessage: 'Successfully enabled schedule.' } - ), - color: 'success', - iconType: 'check', - id: 'successEnableToast', - }; - // @ts-ignore - setToasts(toasts.concat(successToast)); - }; - - const addErrorEnablingScheduleToastHandler = () => { - const errorToast = { - title: i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.toast.errorEnablingSchedule. ', - { defaultMessage: 'Error enabling schedule.' } - ), - color: 'danger', - iconType: 'alert', - id: 'errorToast', - }; - // @ts-ignore - setToasts(toasts.concat(errorToast)); - }; - - const addSuccessDisablingScheduleToastHandler = () => { - const successToast = { - title: i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.toast.successfullyDisabledSchedule. ', - { defaultMessage: 'Successfully disabled schedule.' } - ), - color: 'success', - iconType: 'check', - id: 'successDisableToast', - }; - // @ts-ignore - setToasts(toasts.concat(successToast)); - }; - - const handleSuccessChangingScheduleStatusToast = (statusChange: string) => { - if (statusChange === 'enable') { - addSuccessEnablingScheduleToastHandler(); - } else if (statusChange === 'disable') { - addSuccessDisablingScheduleToastHandler(); - } - }; - - const addErrorDisablingScheduleToastHandler = () => { - const errorToast = { - title: i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.toast.errorDisablingSchedule. ', - { defaultMessage: 'Error disabling schedule.' } - ), - color: 'danger', - iconType: 'alert', - id: 'errorDisableToast', - }; - // @ts-ignore - setToasts(toasts.concat(errorToast)); - }; - - const handleErrorChangingScheduleStatusToast = (statusChange: string) => { - if (statusChange === 'enable') { - addErrorEnablingScheduleToastHandler(); - } else if (statusChange === 'disable') { - addErrorDisablingScheduleToastHandler(); - } else if (statusChange === 'permissions') { - addPermissionsMissingStatusChangeToastHandler(); - } - }; - - const addErrorDeletingReportDefinitionToastHandler = () => { - const errorToast = { - title: i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.toast.errorDeletingReport definition. ', - { defaultMessage: 'Error deleting report definition.' } - ), - color: 'danger', - iconType: 'alert', - id: 'errorDeleteToast', - }; - // @ts-ignore - setToasts(toasts.concat(errorToast)); - }; - - const handleErrorDeletingReportDefinitionToast = () => { - addErrorDeletingReportDefinitionToastHandler(); - }; - - const removeToast = (removedToast: { id: string; }) => { - setToasts(toasts.filter((toast: any) => toast.id !== removedToast.id)); - }; - - const handleReportDefinitionDetails = (e: ReportDefinitionDetails) => { - setReportDefinitionDetails(e); - }; - - const handleReportDefinitionRawResponse = (e: {} ) => { - setReportDefinitionRawResponse(e); - }; - - const DeleteConfirmationModal = () => { - const closeModal = () => { - setShowDeleteModal(false); - }; - - return ( -
- - -

- {i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.button.delete.query', - { - defaultMessage: 'Are you sure you want to delete "{name}"?', - values: { name: reportDefinitionDetails.name }, - } - )} -

-
-
-
- ); - }; - - const humanReadableScheduleDetails = (trigger) => { - let scheduleDetails = ''; - if (trigger.trigger_type === 'Schedule') { - if (trigger.trigger_params.schedule_type === 'Recurring') { - // Daily - if ( - trigger.trigger_params.schedule.interval.unit === 'DAYS' && - trigger.trigger_params.schedule.interval.period === 1 - ) { - const date = new Date( - trigger.trigger_params.schedule.interval.start_time - ); - scheduleDetails = i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.schedule.dailyAt', - { - defaultMessage: 'Daily @ {time}', - values: { time: date.toTimeString() }, - } - ); - } - // By interval - else { - const date = new Date( - trigger.trigger_params.schedule.interval.start_time - ); - scheduleDetails = i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.schedule.byInterval', - { - defaultMessage: - 'By interval, every {period} {unit}, starting @ {time}', - values: { - period: trigger.trigger_params.schedule.interval.period, - unit: trigger.trigger_params.schedule.interval.unit.toLowerCase(), - time: date.toTimeString(), - }, - } - ); - } - } - // Cron - else if (trigger.trigger_params.schedule_type === 'Cron based') { - scheduleDetails = i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.schedule.cronBased', - { - defaultMessage: 'Cron based: {expression} ({timezone})', - values: { - expression: trigger.trigger_params.schedule.cron.expression, - timezone: trigger.trigger_params.schedule.cron.timezone, - }, - } - ); - } - } - return scheduleDetails; - }; - - const getReportDefinitionDetailsMetadata = ( - data: ReportDefinitionSchemaType - ) : ReportDefinitionDetails => { - const reportDefinition: ReportDefinitionSchemaType = data; - const { - report_params: reportParams, - trigger, - delivery, - time_created: timeCreated, - last_updated: lastUpdated, - } = reportDefinition; - const { - trigger_type: triggerType, - trigger_params: triggerParams, - } = trigger; - const { - core_params: { - base_url: baseUrl, - report_format: reportFormat, - time_duration: timeDuration, - }, - } = reportParams; - - let readableDate = new Date(timeCreated); - let displayCreatedDate = - readableDate.toDateString() + ' ' + readableDate.toLocaleTimeString(); - - let readableUpdatedDate = new Date(lastUpdated); - let displayUpdatedDate = - readableUpdatedDate.toDateString() + - ' ' + - readableUpdatedDate.toLocaleTimeString(); - - let reportDefinitionDetails = { - name: reportParams.report_name, - description: - reportParams.description === '' ? `\u2014` : reportParams.description, - created: displayCreatedDate, - lastUpdated: displayUpdatedDate, - source: reportParams.report_source, - baseUrl: baseUrl, - // TODO: need better display - timePeriod: moment.duration(timeDuration).humanize(), - fileFormat: reportFormat, - reportHeader: - reportParams.core_params.hasOwnProperty('header') && - reportParams.core_params.header != '' - ? reportParams.core_params.header - : `\u2014`, - reportFooter: - reportParams.core_params.hasOwnProperty('footer') && - reportParams.core_params.footer != '' - ? reportParams.core_params.footer - : `\u2014`, - triggerType: triggerType, - scheduleDetails: triggerParams - ? humanReadableScheduleDetails(data.trigger) - : `\u2014`, - status: reportDefinition.status, - }; - return reportDefinitionDetails; - }; - - useEffect(() => { - const { httpClient } = props; - httpClient - .get(`../api/reporting/reportDefinitions/${reportDefinitionId}`) - .then((response: {report_definition: ReportDefinitionSchemaType}) => { - handleReportDefinitionRawResponse(response); - handleReportDefinitionDetails(getReportDefinitionDetailsMetadata(response.report_definition)); - props.setBreadcrumbs([ - { - text: i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.schedule.breadcrumb.reporting', - { defaultMessage: 'Reporting' } - ), - href: '#', - }, - { - text: i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.schedule.breadcrumb.reportDefinitionDetails', - { - defaultMessage: 'Report definition details: {name}', - values: { - name: response.report_definition.report_params.report_name, - }, - } - ), - }, - ]); - }) - .catch((error: any) => { - console.error( - i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.schedule.breadcrumb.error', - { - defaultMessage: - 'error when getting report definition details: {error}', - values: { error: error }, - } - ) - ); - handleDetailsErrorToast(); - }); - }, []); - - const downloadIconDownload = async () => { - handleLoading(true); - await generateReportFromDetails(); - handleLoading(false); - }; - - const fileFormatDownload = (data: { [x: string]: any; }) => { - let formatUpper = data['fileFormat']; - formatUpper = fileFormatsUpper[formatUpper]; - return ( - - {formatUpper + ' '} - - - ); - }; - - const sourceURL = (data: ReportDefinitionDetails) => { - return ( - - {data['source']} - - ); - }; - - const changeScheduledReportDefinitionStatus = (statusChange: string) => { - let updatedReportDefinition = reportDefinitionRawResponse.report_definition; - if (statusChange === 'Disable') { - updatedReportDefinition.trigger.trigger_params.enabled = false; - updatedReportDefinition.status = 'Disabled'; - } else if (statusChange === 'Enable') { - updatedReportDefinition.trigger.trigger_params.enabled = true; - updatedReportDefinition.status = 'Active'; - } - const { httpClient } = props; - httpClient - .put(`../api/reporting/reportDefinitions/${reportDefinitionId}`, { - body: JSON.stringify(updatedReportDefinition), - params: reportDefinitionId.toString(), - }) - .then(() => { - const updatedRawResponse = { report_definition: {} }; - updatedRawResponse.report_definition = updatedReportDefinition; - handleReportDefinitionRawResponse(updatedRawResponse); - setReportDefinitionDetails( - getReportDefinitionDetailsMetadata(updatedReportDefinition) - ); - if (statusChange === 'Enable') { - handleSuccessChangingScheduleStatusToast('enable'); - } else if (statusChange === 'Disable') { - handleSuccessChangingScheduleStatusToast('disable'); - } - }) - .catch((error: { body: { statusCode: number; }; }) => { - console.error('error in updating report definition status:', error); - if (error.body.statusCode === 403) { - handleErrorChangingScheduleStatusToast('permissions'); - } else { - if (statusChange === 'Enable') { - handleErrorChangingScheduleStatusToast('enable'); - } else if (statusChange === 'Disable') { - handleErrorChangingScheduleStatusToast('disable'); - } - } - }); - }; - - const ScheduledDefinitionStatus = () => { - const status = - reportDefinitionDetails.status === 'Active' ? 'Disable' : 'Enable'; - - return ( - changeScheduledReportDefinitionStatus(status)} - id={'changeStatusFromDetailsButton'} - > - {status} - - ); - }; - - const generateReportFromDetails = async () => { - const { httpClient } = props; - handleLoading(true); - let generateReportSuccess = await generateReportFromDefinitionId( - reportDefinitionId, - httpClient - ); - handleLoading(false); - if (generateReportSuccess.status) { - handleSuccessGeneratingReportToast(); - } else { - if (generateReportSuccess.permissionsError) { - handleErrorGeneratingReportToast('permissions'); - } else { - handleErrorGeneratingReportToast('API'); - } - } - }; - - const deleteReportDefinition = () => { - const { httpClient } = props; - httpClient - .delete(`../api/reporting/reportDefinitions/${reportDefinitionId}`) - .then(() => { - window.location.assign(`reports-dashboards#/delete=success`); - }) - .catch((error: { body: { statusCode: number; }; }) => { - console.log('error when deleting report definition:', error); - if (error.body.statusCode === 403) { - handlePermissionsMissingDeleteToast(); - } else { - handleErrorDeletingReportDefinitionToast(); - } - }); - }; - - const showActionButton = - reportDefinitionDetails.triggerType === ON_DEMAND ? ( - generateReportFromDetails()} - id={'generateReportFromDetailsButton'} - > - Generate report - - ) : ( - - ); - - const triggerSection = - reportDefinitionDetails.triggerType === ON_DEMAND ? ( - - ) : ( - - - - - - - ); - - const showDeleteConfirmationModal = showDeleteModal ? ( - - ) : null; - - const showLoadingModal = showLoading ? ( - - ) : null; - - return ( - - - -

- {i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.title', - { defaultMessage: 'Report definition details' } - )} -

-
- - - - - - - -

{reportDefinitionDetails.name}

-
-
-
-
- - - handleShowDeleteModal(show)} - id={'deleteReportDefinitionButton'} - > - {i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.deleteReportDefinitionButton', - { defaultMessage: 'Delete' } - )} - - - {showActionButton} - - { - window.location.assign( - `reports-dashboards#/edit/${reportDefinitionId}` - ); - }} - id={'editReportDefinitionButton'} - > - {i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.editReportDefinitionButton', - { defaultMessage: 'Edit' } - )} - - - -
- - -

- {i18n.translate( - 'opensearch.reports.reportDefinitionsDetails.reportSettings', - { defaultMessage: 'Report settings' } - )} -

-
- - - - - - - - - - - - - - - - - - - - - - - {triggerSection} -
- - {showDeleteConfirmationModal} - {showLoadingModal} -
-
- ); -} diff --git a/dashboards-reports/public/components/main/report_definitions_table.tsx b/dashboards-reports/public/components/main/report_definitions_table.tsx deleted file mode 100644 index b0d255b3..00000000 --- a/dashboards-reports/public/components/main/report_definitions_table.tsx +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useState } from 'react'; -import { - EuiLink, - EuiInMemoryTable, - EuiButton, - EuiEmptyPrompt, - EuiText, - EuiIcon, -} from '@elastic/eui'; -import { i18n } from '@osd/i18n'; -import { humanReadableDate } from './main_utils'; - -const emptyMessageReportDefinitions = ( - - {i18n.translate( - 'opensearch.reports.reportDefinitionsTable.emptyMessageReports.noReportDefinitions', - { defaultMessage: 'No report definitions to display' } - )} - - } - titleSize="xs" - body={ -
- - {i18n.translate( - 'opensearch.reports.reportDefinitionsTable.emptyMessageReports.createANewDefinition', - { defaultMessage: 'Create a new report definition to get started' } - )} - - - {i18n.translate( - 'opensearch.reports.reportDefinitionsTable.emptyMessageReports.toLearnMore', - { defaultMessage: 'To learn more, see' } - )}{' '} - - {i18n.translate( - 'opensearch.reports.reportDefinitionsTable.emptyMessageReports.getStarted', - { - defaultMessage: - 'Get started with OpenSearch Dashboards reporting', - } - )} - - - -
- } - actions={ -
- { - window.location.assign('reports-dashboards#/create'); - }} - > - {i18n.translate( - 'opensearch.reports.reportDefinitionsTable.emptyMessageReports.createReportDefinition', - { defaultMessage: 'Create report definition' } - )} - -
- } - /> -); - -const reportDefinitionsSearch = { - box: { - incremental: true, - }, - filters: [], -}; - -export function ReportDefinitions(props) { - const { pagination, reportDefinitionsTableContent } = props; - - const [sortField, setSortField] = useState('lastUpdated'); - const [sortDirection, setSortDirection] = useState('des'); - - const sorting = { - sort: { - field: sortField, - direction: sortDirection, - }, - }; - - const getDefinitionTableItemId = (name) => { - let index; - for ( - index = 0; - index < props.reportDefinitionsTableContent.length; - ++index - ) { - if (name === reportDefinitionsTableContent[index].reportName) { - return reportDefinitionsTableContent[index].id; - } - } - }; - - const navigateToDefinitionDetails = (name: any) => { - let id = getDefinitionTableItemId(name); - window.location.assign( - `reports-dashboards#/report_definition_details/${id}` - ); - }; - - const reportDefinitionsColumns = [ - { - field: 'reportName', - name: i18n.translate( - 'opensearch.reports.reportDefinitionsTable.columns.name', - { - defaultMessage: 'Name', - } - ), - render: (name) => ( - navigateToDefinitionDetails(name)} - id={'reportDefinitionDetailsLink'} - > - {name} - - ), - }, - { - field: 'source', - name: i18n.translate( - 'opensearch.reports.reportDefinitionsTable.columns.source', - { defaultMessage: 'Source' } - ), - render: (value, item) => ( - - {value} - - ), - }, - { - field: 'type', - name: i18n.translate( - 'opensearch.reports.reportDefinitionsTable.columns.type', - { - defaultMessage: 'Type', - } - ), - sortable: true, - truncateText: false, - }, - { - field: 'details', - name: i18n.translate( - 'opensearch.reports.reportDefinitionsTable.columns.scheduleDetails', - { defaultMessage: 'Schedule details' } - ), - sortable: false, - truncateText: true, - }, - { - field: 'lastUpdated', - name: i18n.translate( - 'opensearch.reports.reportDefinitionsTable.columns.lastUpdated', - { defaultMessage: 'Last Updated' } - ), - render: (date) => { - let readable = humanReadableDate(date); - return {readable}; - }, - }, - { - field: 'status', - name: i18n.translate( - 'opensearch.reports.reportDefinitionsTable.columns.status', - { defaultMessage: 'Status' } - ), - sortable: true, - truncateText: false, - }, - ]; - - const displayMessage = - reportDefinitionsTableContent.length === 0 - ? emptyMessageReportDefinitions - : i18n.translate( - 'opensearch.reports.reportDefinitionsTable.emptyMessageReports.noDefinitionsFound', - { - defaultMessage: - '0 report definitions match the search criteria. Search again.', - } - ); - - return ( -
- -
- ); -} diff --git a/dashboards-reports/public/components/main/report_details/__tests__/__snapshots__/report_details.test.tsx.snap b/dashboards-reports/public/components/main/report_details/__tests__/__snapshots__/report_details.test.tsx.snap deleted file mode 100644 index 7d0b79f6..00000000 --- a/dashboards-reports/public/components/main/report_details/__tests__/__snapshots__/report_details.test.tsx.snap +++ /dev/null @@ -1,760 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` panel render 5 hours recurring component 1`] = ` -
-
-

- Report details -

-
-
-
-
-
-
-

- test create report definition trigger -

-
-
-
-
-
-

- Report Settings -

-
-
-
-
-
- Name -
-
- test create report definition trigger -
-
-
-
-
-
- Description -
-
- — -
-
-
-
-
-
- Created -
-
- — -
-
-
-
-
-
- Last updated -
-
- — -
-
-
-
-
-
- -
-
-
- Time period -
-
- Invalid Date -> 10/23/2020, 8:53:35 PM -
-
-
-
-
-
- File format -
-
- -
-
-
-
-
-
- State -
-
-
-
-
-
-
-
-
-
- Report header -
-
-

- — -

-
-
-
-
-
-
- Report footer -
-
-

- — -

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Report trigger -
-
- Schedule -
-
-
-
-
-
- Schedule type -
-
- Recurring -
-
-
-
-
-
- Schedule details -
-
- — -
-
-
-
-
-
-
-
-
-
-
-
-
-
-`; - -exports[` panel render on-demand component 1`] = ` -
-
-

- Report details -

-
-
-
-
-
-
-

- test create report definition trigger -

-
-
-
-
-
-

- Report Settings -

-
-
-
-
-
- Name -
-
- test create report definition trigger -
-
-
-
-
-
- Description -
-
- — -
-
-
-
-
-
- Created -
-
- — -
-
-
-
-
-
- Last updated -
-
- — -
-
-
-
-
-
- -
-
-
- Time period -
-
- Invalid Date -> 10/23/2020, 8:53:35 PM -
-
-
-
-
-
- File format -
-
- -
-
-
-
-
-
- State -
-
-
-
-
-
-
-
-
-
- Report header -
-
-

- — -

-
-
-
-
-
-
- Report footer -
-
-

- — -

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Report trigger -
-
- On demand -
-
-
-
-
-
-
-`; diff --git a/dashboards-reports/public/components/main/report_details/__tests__/report_details.test.tsx b/dashboards-reports/public/components/main/report_details/__tests__/report_details.test.tsx deleted file mode 100644 index 4bad6fa7..00000000 --- a/dashboards-reports/public/components/main/report_details/__tests__/report_details.test.tsx +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { render } from '@testing-library/react'; -import { ReportDetails } from '../report_details'; -import propsMock from '../../../../../test/propsMock'; -import httpClientMock from '../../../../../test/httpMockClient'; -import 'babel-polyfill'; -import { act } from 'react-dom/test-utils'; - -function setBreadcrumbs(array: []) { - jest.fn(); -} - -describe(' panel', () => { - const match = { - params: { - reportId: '1', - }, - }; - - test('render on-demand component', async () => { - const promise = Promise.resolve(); - const report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: 'PT30M', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'On demand', - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - query_url: `http://localhost:5601/app/dashboards#/view/7adfa750-4c81-11e8-b3d7-01146121b73d?_g=(time:(from:'2020-10-23T20:53:35.315Z',to:'2020-10-23T21:23:35.316Z'))`, - config_list: [] - }); - - const { container } = render( - - ); - await act(() => promise); - await expect(container.firstChild).toMatchSnapshot(); - }); - - test('render 5 hours recurring component', async () => { - const promise = Promise.resolve(); - const report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: 'PT30M', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - schedule: { - interval: { - period: 5, - unit: 'HOURS', - timezone: 'PST8PDT', - }, - }, - enabled_time: 1114939203, - enabled: true, - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - query_url: `http://localhost:5601/app/dashboards#/view/7adfa750-4c81-11e8-b3d7-01146121b73d?_g=(time:(from:'2020-10-23T20:53:35.315Z',to:'2020-10-23T21:23:35.316Z'))`, - config_list: [] - }); - - const { container } = render( - - ); - await act(() => promise); - await expect(container.firstChild).toMatchSnapshot(); - }); -}); diff --git a/dashboards-reports/public/components/main/report_details/report_details.tsx b/dashboards-reports/public/components/main/report_details/report_details.tsx deleted file mode 100644 index 65fa02aa..00000000 --- a/dashboards-reports/public/components/main/report_details/report_details.tsx +++ /dev/null @@ -1,490 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useState } from 'react'; -import { i18n } from '@osd/i18n'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiPage, - EuiPageHeader, - EuiTitle, - EuiPageBody, - EuiPageContent, - EuiHorizontalRule, - EuiSpacer, - EuiDescriptionList, - EuiDescriptionListTitle, - EuiDescriptionListDescription, - EuiPageHeaderSection, - EuiLink, - EuiIcon, - EuiGlobalToastList, -} from '@elastic/eui'; -import { fileFormatsUpper, generateReportById } from '../main_utils'; -import { GenerateReportLoadingModal } from '../loading_modal'; -import { ReportSchemaType } from '../../../../server/model'; -import dateMath from '@elastic/datemath'; -import { - permissionsMissingActions, - permissionsMissingToast, - timeRangeMatcher, -} from '../../utils/utils'; -import { TRIGGER_TYPE } from '../../../../server/routes/utils/constants'; - -interface ReportDetails { - reportName: string; - description: string; - created: string; - lastUpdated: string; - source: string; - time_period: string; - defaultFileFormat: string; - state: string | undefined; - reportHeader: string; - reportFooter: string; - triggerType: string; - scheduleType: string; - scheduleDetails: string; - queryUrl: string; -} - -export const ReportDetailsComponent = (props: { reportDetailsComponentTitle: any; reportDetailsComponentContent: any; }) => { - const { reportDetailsComponentTitle, reportDetailsComponentContent } = props; - - return ( - - - - {reportDetailsComponentTitle} - - - {reportDetailsComponentContent} - - - - ); -}; - -// convert markdown to plain text, trim it if it's longer than 3 lines -export const trimAndRenderAsText = (markdown: string) => { - if (!markdown) return markdown; - const lines = markdown.split('\n').filter((line) => line); - const elements = lines.slice(0, 3).map((line, i) =>

{line}

); - return lines.length <= 3 ? elements : elements.concat(

...

); -}; - -export const formatEmails = (emails: string[]) => { - return Array.isArray(emails) ? emails.join(', ') : emails; -}; - -export function ReportDetails(props: { match?: any; setBreadcrumbs?: any; httpClient: any; }) { - const [reportDetails, setReportDetails] = useState({ - reportName: '', - description: '', - created: '', - lastUpdated: '', - source: '', - time_period: '', - defaultFileFormat: '', - state: '', - reportHeader: '', - reportFooter: '', - triggerType: '', - scheduleType: '', - scheduleDetails: '', - queryUrl: '' - }); - const [toasts, setToasts] = useState([]); - const [showLoading, setShowLoading] = useState(false); - - const reportId = props.match['params']['reportId']; - - const handleLoading = (e: boolean | ((prevState: boolean) => boolean)) => { - setShowLoading(e); - }; - - const addPermissionsMissingDownloadToastHandler = () => { - const toast = permissionsMissingToast( - permissionsMissingActions.GENERATING_REPORT - ); - // @ts-ignore - setToasts(toasts.concat(toast)); - }; - - const handlePermissionsMissingDownloadToast = () => { - addPermissionsMissingDownloadToastHandler(); - }; - - const addErrorToastHandler = ( - title = i18n.translate( - 'opensearch.reports.details.errorLoadingReportDetails', - { defaultMessage: 'Error loading report details.' } - ), - text = '' - ) => { - const errorToast = { - title, - text, - color: 'danger', - iconType: 'alert', - id: 'reportDetailsErrorToast', - }; - // @ts-ignore - setToasts(toasts.concat(errorToast)); - }; - - const handleErrorToast = (title?: string, text?: string) => { - addErrorToastHandler(title, text); - }; - - const addSuccessToastHandler = () => { - const successToast = { - title: 'Success', - color: 'success', - text: ( -

- {i18n.translate( - 'opensearch.reports.details.reportSuccessfullyDownloaded', - { defaultMessage: 'Report successfully downloaded!' } - )} -

- ), - id: 'onDemandDownloadSuccessToast', - }; - // @ts-ignore - setToasts(toasts.concat(successToast)); - }; - - const handleSuccessToast = () => { - addSuccessToastHandler(); - }; - - const removeToast = (removedToast: { id: any; }) => { - setToasts(toasts.filter((toast : any) => toast.id !== removedToast.id)); - }; - - const handleReportDetails = (e: React.SetStateAction) => { - setReportDetails(e); - }; - - const convertTimestamp = (timestamp: number | undefined) => { - let displayDate = `\u2014`; - if (timestamp) { - let readableDate = new Date(timestamp); - displayDate = readableDate.toLocaleString(); - } - return displayDate; - }; - - const parseTimePeriod = (queryUrl: string) => { - let [fromDateString, toDateString] : RegExpMatchArray | null = queryUrl.match( - timeRangeMatcher - ); - - fromDateString = decodeURIComponent(fromDateString.replace(/[']+/g, '')); - toDateString = decodeURIComponent(toDateString.replace(/[']+/g, '')); - - let fromDateParsed = dateMath.parse(fromDateString); - let toDateParsed = dateMath.parse(toDateString, { roundUp: true }); - - const fromTimePeriod = fromDateParsed?.toDate(); - const toTimePeriod = toDateParsed?.toDate(); - return ( - fromTimePeriod?.toLocaleString() + ' -> ' + toTimePeriod?.toLocaleString() - ); - }; - - const getReportDetailsData = ( - report: ReportSchemaType - ) : ReportDetails => { - const { - report_definition: reportDefinition, - last_updated: lastUpdated, - state, - query_url: queryUrl, - } = report; - const { report_params: reportParams, trigger } = reportDefinition; - const { - trigger_type: triggerType, - trigger_params: triggerParams, - } = trigger; - const coreParams = reportParams.core_params; - // covert timestamp to local date-time string - let reportDetails = { - reportName: reportParams.report_name, - description: - reportParams.description === '' ? `\u2014` : reportParams.description, - created: convertTimestamp(report.time_created), - lastUpdated: convertTimestamp(report.last_updated), - source: reportParams.report_source, - // TODO: we have all data needed, time_from, time_to, time_duration, - // think of a way to better display - time_period: (reportParams.report_source !== 'Notebook') ? parseTimePeriod(queryUrl) : `\u2014`, - defaultFileFormat: coreParams.report_format, - state: state, - reportHeader: - reportParams.core_params.hasOwnProperty('header') && - reportParams.core_params.header != '' - ? reportParams.core_params.header - : `\u2014`, - reportFooter: - reportParams.core_params.hasOwnProperty('footer') && - reportParams.core_params.footer != '' - ? reportParams.core_params.footer - : `\u2014`, - triggerType: triggerType, - scheduleType: triggerParams ? triggerParams.schedule_type : `\u2014`, - scheduleDetails: `\u2014`, - queryUrl: queryUrl, - }; - return reportDetails; - }; - - useEffect(() => { - const { httpClient } = props; - httpClient - .get('../api/reporting/reports/' + reportId) - .then((response: ReportSchemaType) => { - handleReportDetails(getReportDetailsData(response)); - props.setBreadcrumbs([ - { - text: i18n.translate( - 'opensearch.reports.details.breadcrumb.reporting', - { defaultMessage: 'Reporting' } - ), - href: '#', - }, - { - text: i18n.translate( - 'opensearch.reports.details.breadcrumb.reportDetails', - { - defaultMessage: 'Report details: {name}', - values: { - name: response.report_definition.report_params.report_name, - }, - } - ), - }, - ]); - }) - .catch((error: any) => { - console.log('Error when fetching report details: ', error); - handleErrorToast(); - }); - }, []); - - const downloadIconDownload = async () => { - handleLoading(true); - await generateReportById( - reportId, - props.httpClient, - handleSuccessToast, - handleErrorToast, - handlePermissionsMissingDownloadToast - ); - handleLoading(false); - }; - - const fileFormatDownload = (data: ReportDetails) => { - let formatUpper = data['defaultFileFormat']; - formatUpper = fileFormatsUpper[formatUpper]; - return ( - - {formatUpper + ' '} - - - ); - }; - - const sourceURL = (data: ReportDetails) => { - return ( - - {data['source']} - - ); - }; - - const triggerSection = - reportDetails.triggerType === TRIGGER_TYPE.onDemand ? ( - - ) : ( - - - - - - - ) - - const showLoadingModal = showLoading ? ( - - ) : null; - - return ( - - - -

- {i18n.translate('opensearch.reports.details.title', { - defaultMessage: 'Report details', - })} -

-
- - - - - - - -

{reportDetails.reportName}

-
-
-
-
-
- - -

- {i18n.translate('opensearch.reports.details.reportSettings', { - defaultMessage: 'Report Settings', - })} -

-
- - - - - - - - - - - - - - - - - - - - - - - {triggerSection} -
- - {showLoadingModal} -
-
- ); -} diff --git a/dashboards-reports/public/components/main/reports_table.tsx b/dashboards-reports/public/components/main/reports_table.tsx deleted file mode 100644 index 90b85563..00000000 --- a/dashboards-reports/public/components/main/reports_table.tsx +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { Fragment, useState } from 'react'; -import { i18n } from '@osd/i18n'; -import { - EuiButton, - // @ts-ignore - EuiLink, - EuiText, - EuiIcon, - EuiEmptyPrompt, - EuiInMemoryTable, -} from '@elastic/eui'; -import { - fileFormatsUpper, - humanReadableDate, - generateReportById, -} from './main_utils'; -import { GenerateReportLoadingModal } from './loading_modal'; - -const reportStatusOptions = [ - 'Created', - 'Error', - 'Pending', - 'Shared', - 'Archived', -]; -const reportTypeOptions = ['Schedule', 'On demand']; - -const emptyMessageReports = ( - - {i18n.translate( - 'opensearch.reports.reportsTable.emptyMessageReports.noReportsToDisplay', - { defaultMessage: 'No reports to display' } - )} - - } - titleSize="xs" - body={ -
- - {i18n.translate( - 'opensearch.reports.reportsTable.emptyMessageReports.createAReportDefinition', - { - defaultMessage: - 'Create a report definition, or share/download a report from a dashboard, saved search or visualization.', - } - )} - - - {i18n.translate( - 'opensearch.reports.reportsTable.emptyMessageReports.toLearnMore', - { defaultMessage: 'To learn more, see' } - )}{' '} - - {i18n.translate( - 'opensearch.reports.reportsTable.emptyMessageReports.getStarted', - { - defaultMessage: - 'Get started with OpenSearch Dashboards reporting', - } - )} - - - -
- } - /> -); - -export function ReportsTable(props) { - const { - pagination, - reportsTableItems, - httpClient, - handleSuccessToast, - handleErrorToast, - handlePermissionsMissingToast, - } = props; - - const [sortField, setSortField] = useState('timeCreated'); - const [sortDirection, setSortDirection] = useState('des'); - const [showLoading, setShowLoading] = useState(false); - const [message, setMessage] = useState(''); - - const handleLoading = (e) => { - setShowLoading(e); - }; - - const onDemandDownload = async (id: any) => { - handleLoading(true); - await generateReportById( - id, - httpClient, - handleSuccessToast, - handleErrorToast, - handlePermissionsMissingToast - ); - handleLoading(false); - }; - - const reportsTableColumns = [ - { - field: 'reportName', - name: i18n.translate( - 'opensearch.reports.reportsTable.reportsTableColumns.Name', - { defaultMessage: 'Name' } - ), - render: (reportName, item) => ( - { - window.location.assign( - `reports-dashboards#/report_details/${item.id}` - ); - }} - id={'reportDetailsLink'} - > - {reportName} - - ), - }, - { - // TODO: link to dashboard/visualization snapshot, use "queryUrl" field. Display dashboard name? - field: 'reportSource', - name: i18n.translate( - 'opensearch.reports.reportsTable.reportsTableColumns.Source', - { defaultMessage: 'Source' } - ), - render: (source, item) => - item.state === 'Pending' ? ( - {source} - ) : ( - - {source} - - ), - }, - { - field: 'type', - name: i18n.translate( - 'opensearch.reports.reportsTable.reportsTableColumns.Type', - { defaultMessage: 'Type' } - ), - sortable: true, - truncateText: false, - }, - { - field: 'timeCreated', - name: i18n.translate( - 'opensearch.reports.reportsTable.reportsTableColumns.creationTime', - { defaultMessage: 'Creation time' } - ), - render: (date) => { - let readable = humanReadableDate(date); - return {readable}; - }, - }, - { - field: 'state', - name: i18n.translate( - 'opensearch.reports.reportsTable.reportsTableColumns.State', - { defaultMessage: 'State' } - ), - sortable: true, - truncateText: false, - }, - { - field: 'id', - name: i18n.translate( - 'opensearch.reports.reportsTable.reportsTableColumns.Generate', - { defaultMessage: 'Generate' } - ), - render: (id, item) => - item.state === 'Pending' ? ( - - {fileFormatsUpper[item.format]} - - ) : ( - onDemandDownload(id)} - id="landingPageOnDemandDownload" - > - {fileFormatsUpper[item.format]} - - ), - }, - ]; - - const sorting = { - sort: { - field: sortField, - direction: sortDirection, - }, - }; - - const reportsListSearch = { - box: { - incremental: true, - }, - filters: [ - { - type: 'field_value_selection', - field: 'type', - name: i18n.translate( - 'opensearch.reports.reportsTable.reportsListSearch.Type', - { defaultMessage: 'Type' } - ), - multiSelect: 'or', - options: reportTypeOptions.map((type) => ({ - value: type, - name: type, - view: type, - })), - }, - { - type: 'field_value_selection', - field: 'state', - name: i18n.translate( - 'opensearch.reports.reportsTable.reportsListSearch.State', - { defaultMessage: 'State' } - ), - multiSelect: 'or', - options: reportStatusOptions.map((state) => ({ - value: state, - name: state, - view: state, - })), - }, - ], - }; - - const displayMessage = - reportsTableItems.length === 0 - ? emptyMessageReports - : i18n.translate( - 'opensearch.reports.reportsTable.reportsListSearch.noRreportsMatch', - { - defaultMessage: '0 reports match the search criteria. Search again', - } - ); - - const showLoadingModal = showLoading ? ( - - ) : null; - - return ( - - - {showLoadingModal} - - ); -} diff --git a/dashboards-reports/public/components/report_definitions/create/create_report_definition.tsx b/dashboards-reports/public/components/report_definitions/create/create_report_definition.tsx deleted file mode 100644 index eed7015a..00000000 --- a/dashboards-reports/public/components/report_definitions/create/create_report_definition.tsx +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useState } from 'react'; -import { i18n } from '@osd/i18n'; -import { - EuiButtonEmpty, - EuiFlexGroup, - EuiFlexItem, - EuiGlobalToastList, - EuiButton, - EuiTitle, - EuiPageBody, - EuiSpacer, -} from '@elastic/eui'; -import { ReportSettings } from '../report_settings'; -import { generateReportFromDefinitionId } from '../../main/main_utils'; -import { converter } from '../utils'; -import { - permissionsMissingToast, - permissionsMissingActions, -} from '../../utils/utils'; -import { definitionInputValidation } from '../utils/utils'; - -interface reportParamsType { - report_name: string; - report_source: string; - description: string; - core_params: visualReportParams | dataReportParams; -} -interface visualReportParams { - base_url: string; - report_format: string; - header: string; - footer: string; - time_duration: string; -} - -interface dataReportParams { - saved_search_id: number; - base_url: string; - report_format: string; - time_duration: string; -} -interface triggerType { - trigger_type: string; - trigger_params?: any; -} - -interface deliveryType { - configIds: Array; - title: string; - textDescription: string; - htmlDescription: string; -} - -export interface TriggerParamsType { - schedule_type: string; - schedule: Recurring | Cron; - enabled_time: number; - enabled: boolean; -} - -interface Recurring { - interval: { - period: number; - unit: string; - start_time: number; - }; -} - -interface Cron { - cron: { - cron_expression: string; - time_zone: string; - }; -} - -export interface reportDefinitionParams { - report_params: reportParamsType; - delivery: deliveryType; - trigger: triggerType; -} - -export interface timeRangeParams { - timeFrom: Date; - timeTo: Date; -} - -export function CreateReport(props: { [x: string]: any; setBreadcrumbs?: any; httpClient?: any; }) { - let createReportDefinitionRequest: reportDefinitionParams = { - report_params: { - report_name: '', - report_source: '', - description: '', - core_params: { - base_url: '', - report_format: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: '', - }, - }; - - const [toasts, setToasts] = useState([]); - const [comingFromError, setComingFromError] = useState(false); - const [preErrorData, setPreErrorData] = useState({}); - - const [ - showSettingsReportNameError, - setShowSettingsReportNameError, - ] = useState(false); - const [ - settingsReportNameErrorMessage, - setSettingsReportNameErrorMessage, - ] = useState(''); - const [ - showSettingsReportSourceError, - setShowSettingsReportSourceError, - ] = useState(false); - const [ - settingsReportSourceErrorMessage, - setSettingsReportSourceErrorMessage, - ] = useState(''); - const [ - showTriggerIntervalNaNError, - setShowTriggerIntervalNaNError, - ] = useState(false); - const [showCronError, setShowCronError] = useState(false); - const [showTimeRangeError, setShowTimeRangeError] = useState(false); - - // preserve the state of the request after an invalid create report definition request - if (comingFromError) { - createReportDefinitionRequest = preErrorData; - } - - const addInputValidationErrorToastHandler = () => { - const errorToast = { - title: i18n.translate( - 'opensearch.reports.createReportDefinition.error.fieldsHaveAnError', - { - defaultMessage: - 'One or more fields have an error. Please check and try again.', - } - ), - color: 'danger', - iconType: 'alert', - id: 'errorToast', - }; - // @ts-ignore - setToasts(toasts.concat(errorToast)); - }; - - const handleInputValidationErrorToast = () => { - addInputValidationErrorToastHandler(); - }; - - const addErrorOnCreateToastHandler = (errorType: string) => { - let toast = {}; - if (errorType === 'permissions') { - toast = permissionsMissingToast( - permissionsMissingActions.CREATING_REPORT_DEFINITION - ); - } else if (errorType === 'API') { - toast = { - title: i18n.translate( - 'opensearch.reports.createReportDefinition.error.errorCreating', - { defaultMessage: 'Error creating report definition.' } - ), - color: 'danger', - iconType: 'alert', - id: 'errorToast', - }; - } - // @ts-ignore - setToasts(toasts.concat(toast)); - }; - - const handleErrorOnCreateToast = (errorType: string) => { - addErrorOnCreateToastHandler(errorType); - }; - - const addInvalidTimeRangeToastHandler = () => { - const errorToast = { - title: i18n.translate( - 'opensearch.reports.createReportDefinition.error.invalidTimeRange', - { defaultMessage: 'Invalid time range selected.' } - ), - color: 'danger', - iconType: 'alert', - id: 'timeRangeErrorToast', - }; - // @ts-ignore - setToasts(toasts.concat(errorToast)); - }; - - const handleInvalidTimeRangeToast = () => { - addInvalidTimeRangeToastHandler(); - }; - - const removeToast = (removedToast: { id: string; }) => { - setToasts(toasts.filter((toast: any) => toast.id !== removedToast.id)); - }; - - let timeRange = { - timeFrom: new Date(), - timeTo: new Date(), - }; - - const createNewReportDefinition = async ( - metadata: reportDefinitionParams, - timeRange: timeRangeParams - ) => { - const { httpClient } = props; - //TODO: need better handle - if ( - metadata.trigger.trigger_type === 'On demand' && - metadata.trigger.trigger_params !== undefined - ) { - delete metadata.trigger.trigger_params; - } - - let error = false; - await definitionInputValidation( - metadata, - error, - setShowSettingsReportNameError, - setSettingsReportNameErrorMessage, - setShowSettingsReportSourceError, - setSettingsReportSourceErrorMessage, - setShowTriggerIntervalNaNError, - timeRange, - setShowTimeRangeError, - setShowCronError, - ).then((response) => { - error = response; - }); - if (error) { - handleInputValidationErrorToast(); - setPreErrorData(metadata); - setComingFromError(true); - } else { - httpClient - .post('../api/reporting/reportDefinition', { - body: JSON.stringify(metadata), - headers: { - 'Content-Type': 'application/json', - }, - }) - .then(async (resp: { scheduler_response: { reportDefinitionId: string; }; }) => { - //TODO: consider handle the on demand report generation from server side instead - if (metadata.trigger.trigger_type === 'On demand') { - const reportDefinitionId = - resp.scheduler_response.reportDefinitionId; - generateReportFromDefinitionId(reportDefinitionId, httpClient); - } - window.location.assign(`reports-dashboards#/create=success`); - }) - .catch((error: {body: { statusCode: number; }; }) => { - console.log('error in creating report definition: ' + error); - if (error.body.statusCode === 403) { - handleErrorOnCreateToast('permissions'); - } else { - handleErrorOnCreateToast('API'); - } - }); - } - }; - - useEffect(() => { - window.scrollTo(0, 0); - props.setBreadcrumbs([ - { - text: i18n.translate( - 'opensearch.reports.createReportDefinition.breadcrumb.reporting', - { defaultMessage: 'Reporting' } - ), - href: '#', - }, - { - text: i18n.translate( - 'opensearch.reports.createReportDefinition.breadcrumb.createReportDefinition', - { defaultMessage: 'Create report definition' } - ), - href: '#/create', - }, - ]); - }, []); - - return ( -
- - -

- {i18n.translate('opensearch.reports.createReportDefinition.title', { - defaultMessage: 'Create report definition', - })} -

-
- - - - - - { - window.location.assign(`reports-dashboards#/`); - }} - > - {i18n.translate( - 'opensearch.reports.createReportDefinition.cancel', - { defaultMessage: 'Cancel' } - )} - - - - - createNewReportDefinition( - createReportDefinitionRequest, - timeRange - ) - } - id={'createNewReportDefinition'} - > - {i18n.translate( - 'opensearch.reports.createReportDefinition.create', - { defaultMessage: 'Create' } - )} - - - - -
-
- ); -} diff --git a/dashboards-reports/public/components/report_definitions/create/index.ts b/dashboards-reports/public/components/report_definitions/create/index.ts deleted file mode 100644 index 4f247918..00000000 --- a/dashboards-reports/public/components/report_definitions/create/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { CreateReport } from './create_report_definition'; diff --git a/dashboards-reports/public/components/report_definitions/delivery/__tests__/__snapshots__/delivery.test.tsx.snap b/dashboards-reports/public/components/report_definitions/delivery/__tests__/__snapshots__/delivery.test.tsx.snap deleted file mode 100644 index 3df27334..00000000 --- a/dashboards-reports/public/components/report_definitions/delivery/__tests__/__snapshots__/delivery.test.tsx.snap +++ /dev/null @@ -1,83 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` panel render create component 1`] = ` -
-
-

- Notification settings -

-
-
-
-
- -
- -
-
-
-`; - -exports[` panel render edit component 1`] = ` -
-
-

- Notification settings -

-
-
-
-
- -
- -
-
-
-`; diff --git a/dashboards-reports/public/components/report_definitions/delivery/__tests__/delivery.test.tsx b/dashboards-reports/public/components/report_definitions/delivery/__tests__/delivery.test.tsx deleted file mode 100644 index fed5f8a8..00000000 --- a/dashboards-reports/public/components/report_definitions/delivery/__tests__/delivery.test.tsx +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { render } from '@testing-library/react'; -import { ReportDelivery } from '../delivery'; -import httpClientMock from '../../../../../test/httpMockClient'; -import { act } from 'react-dom/test-utils'; - -const emptyRequest = { - report_params: { - report_name: '', - report_source: '', - description: '', - core_params: { - base_url: '', - report_format: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: '', - trigger_params: {}, - }, - time_created: 0, - last_updated: 0, - status: '', -}; - -const timeRange = { - timeFrom: new Date(1234567800), - timeTo: new Date(1234567890), -}; - -global.fetch = jest.fn(() => ({ - then: jest.fn(() => ({ - then: jest.fn() - })) -})); - -describe(' panel', () => { - test('render create component', () => { - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - }); - - test('render edit component', async () => { - const promise = Promise.resolve(); - let editReportDefinitionRequest = { - report_params: { - report_name: 'edit cron schedule component', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'On demand', - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition: editReportDefinitionRequest, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); -}); diff --git a/dashboards-reports/public/components/report_definitions/delivery/delivery.tsx b/dashboards-reports/public/components/report_definitions/delivery/delivery.tsx deleted file mode 100644 index b3ab50f3..00000000 --- a/dashboards-reports/public/components/report_definitions/delivery/delivery.tsx +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useState } from 'react'; -import { - EuiFormRow, - EuiPageHeader, - EuiTitle, - EuiPageContent, - EuiPageContentBody, - EuiHorizontalRule, - EuiSpacer, - EuiCheckbox, - EuiComboBox, - EuiFieldText, - EuiButton, -} from '@elastic/eui'; -import CSS from 'csstype'; -import { - getChannelsQueryObject, - noDeliveryChannelsSelectedMessage, - testMessageConfirmationMessage, - testMessageFailureMessage, -} from './delivery_constants'; -import 'react-mde/lib/styles/css/react-mde-all.css'; -import { reportDefinitionParams } from '../create/create_report_definition'; -import ReactMDE from 'react-mde'; -import { converter } from '../utils'; -import { getAvailableNotificationsChannels } from '../../main/main_utils'; -import { REPORTING_NOTIFICATIONS_DASHBOARDS_API } from '../../../../common'; - -const styles: CSS.Properties = { - maxWidth: '800px', -}; - -// TODO: add to schema to avoid need for export -export let includeDelivery = false; - -export type ReportDeliveryProps = { - edit: boolean; - editDefinitionId: string; - reportDefinitionRequest: reportDefinitionParams; - httpClientProps: any; - showDeliveryChannelError: boolean; - deliveryChannelError: string; - showDeliverySubjectError: boolean; - deliverySubjectError: string; - showDeliveryTextError: boolean; - deliveryTextError: string; -}; - -export function ReportDelivery(props: ReportDeliveryProps) { - const { - edit, - editDefinitionId, - reportDefinitionRequest, - httpClientProps, - showDeliveryChannelError, - deliveryChannelError, - showDeliverySubjectError, - deliverySubjectError, - showDeliveryTextError, - deliveryTextError, - } = props; - - const [isDeliveryHidden, setIsHidden] = useState(false); - const [sendNotification, setSendNotification] = useState(false); - const [channels, setChannels] = useState([]); - const [selectedChannels, setSelectedChannels] = useState([]); - const [notificationSubject, setNotificationSubject] = useState('New report'); - const [notificationMessage, setNotificationMessage] = useState( - 'New report available to view' - ); - const [selectedTab, setSelectedTab] = React.useState<'write' | 'preview'>( - 'write' - ); - const [testMessageConfirmation, setTestMessageConfirmation] = useState(''); - - const handleSendNotification = (e: { target: { checked: boolean } }) => { - setSendNotification(e.target.checked); - includeDelivery = e.target.checked; - if (includeDelivery) { - reportDefinitionRequest.delivery.title = 'New report'; - reportDefinitionRequest.delivery.textDescription = - 'New report available to view'; - reportDefinitionRequest.delivery.htmlDescription = converter.makeHtml( - 'New report available to view' - ); - } else { - reportDefinitionRequest.delivery.title = `\u2014`; - reportDefinitionRequest.delivery.textDescription = `\u2014`; - } - }; - - const handleSelectedChannels = (e: Array<{ label: string; id: string }>) => { - setSelectedChannels(e); - reportDefinitionRequest.delivery.configIds = []; - for (let i = 0; i < e.length; ++i) { - reportDefinitionRequest.delivery.configIds.push(e[i].id); - } - }; - - const handleNotificationSubject = (e: { target: { value: string } }) => { - setNotificationSubject(e.target.value); - reportDefinitionRequest.delivery.title = e.target.value; - }; - - const handleNotificationMessage = (e: string) => { - setNotificationMessage(e); - reportDefinitionRequest.delivery.textDescription = e.toString(); - reportDefinitionRequest.delivery.htmlDescription = converter.makeHtml( - e.toString() - ); - }; - - const handleTestMessageConfirmation = (e: JSX.Element) => { - setTestMessageConfirmation(e); - }; - - const defaultCreateDeliveryParams = () => { - includeDelivery = false; - reportDefinitionRequest.delivery = { - configIds: [], - title: `\u2014`, // default values before any Notifications settings are configured - textDescription: `\u2014`, - htmlDescription: '', - }; - }; - - const isStatusCodeSuccess = (statusCode: string) => { - if (!statusCode) return true; - return /^2\d\d/.test(statusCode); - }; - - const eventToNotification = (event: any) => { - const success = event.event.status_list.every((status: any) => - isStatusCodeSuccess(status.delivery_status.status_code) - ); - return { - event_source: event.event.event_source, - status_list: event.event.status_list, - event_id: event.event_id, - created_time_ms: event.created_time_ms, - last_updated_time_ms: event.last_updated_time_ms, - success, - }; - }; - - const getNotification = async (id: string) => { - const response = await httpClientProps.get( - `${REPORTING_NOTIFICATIONS_DASHBOARDS_API.GET_EVENT}/${id}` - ); - return eventToNotification(response.event_list[0]); - }; - - const sendTestNotificationsMessage = async () => { - if (selectedChannels.length === 0) { - handleTestMessageConfirmation(noDeliveryChannelsSelectedMessage); - } - let testMessageFailures = false; - let failedChannels: string[] = []; - // for each config ID in the current channels list - for (let i = 0; i < selectedChannels.length; ++i) { - try { - const eventId = await httpClientProps - .get( - `${REPORTING_NOTIFICATIONS_DASHBOARDS_API.SEND_TEST_MESSAGE}/${selectedChannels[i].id}`, - { - query: { - feature: 'reports', - }, - } - ) - .then((response) => response.event_id); - - await getNotification(eventId).then((response) => { - if (!response.success) { - const error = new Error('Failed to send the test message.'); - failedChannels.push(response.status_list[0].config_name); - error.stack = JSON.stringify(response.status_list, null, 2); - throw error; - } - }); - } catch (error) { - testMessageFailures = true; - } - } - if (testMessageFailures) { - handleTestMessageConfirmation(testMessageFailureMessage(failedChannels)); - } else { - handleTestMessageConfirmation(testMessageConfirmationMessage); - } - }; - - const checkIfNotificationsPluginIsInstalled = () => { - fetch( - '../api/console/proxy?path=%2F_cat%2Fplugins%3Fv%3Dtrue%26s%3Dcomponent%26h%3Dcomponent&method=GET', - { - credentials: 'include', - headers: { - Accept: 'text/plain, */*; q=0.01', - 'Accept-Language': 'en-US,en;q=0.5', - 'osd-xsrf': 'true', - }, - method: 'POST', - mode: 'cors', - } - ) - .then((response) => { - return response.text(); - }) - .then(function (data) { - if (data.includes('opensearch-notifications')) { - setIsHidden(false); - return; - } - setIsHidden(true); - }); - }; - - useEffect(() => { - checkIfNotificationsPluginIsInstalled(); - httpClientProps - .get(`${REPORTING_NOTIFICATIONS_DASHBOARDS_API.GET_CONFIGS}`, { - query: getChannelsQueryObject, - }) - .then(async (response: any) => { - let availableChannels = getAvailableNotificationsChannels( - response.config_list - ); - setChannels(availableChannels); - return availableChannels; - }) - .then((availableChannels: any) => { - if (edit) { - httpClientProps - .get(`../api/reporting/reportDefinitions/${editDefinitionId}`) - .then(async (response: any) => { - if (response.report_definition.delivery.configIds.length > 0) { - // add config IDs - handleSendNotification({ target: { checked: true } }); - let delivery = response.report_definition.delivery; - let editChannelOptions = []; - for (let i = 0; i < delivery.configIds.length; ++i) { - for (let j = 0; j < availableChannels.length; ++j) { - if (delivery.configIds[i] === availableChannels[j].id) { - let editChannelOption = { - label: availableChannels[j].label, - id: availableChannels[j].id, - }; - editChannelOptions.push(editChannelOption); - break; - } - } - } - setSelectedChannels(editChannelOptions); - setNotificationSubject(delivery.title); - setNotificationMessage(delivery.textDescription); - reportDefinitionRequest.delivery = delivery; - } - }); - } else { - defaultCreateDeliveryParams(); - } - }) - .catch((error: string) => { - console.log( - 'error: cannot get available channels from Notifications plugin:', - error - ); - }); - }, []); - - const showNotificationsBody = sendNotification ? ( -
- - - - - - - - - - - - Promise.resolve(converter.makeHtml(markdown)) - } - /> - - - - - Send test message - - -
- ) : null; - - return ( - - ); -} diff --git a/dashboards-reports/public/components/report_definitions/delivery/delivery_constants.tsx b/dashboards-reports/public/components/report_definitions/delivery/delivery_constants.tsx deleted file mode 100644 index 3e049470..00000000 --- a/dashboards-reports/public/components/report_definitions/delivery/delivery_constants.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from "react"; -import { EuiIcon, EuiText } from '@elastic/eui' - -export const noDeliveryChannelsSelectedMessage = ( - - Please select a channel. - -) - -export const testMessageConfirmationMessage = ( - - Test message sent to selected channels. If no test message is received, try again or check your channel settings in Notifications. - -); - -export const testMessageFailureMessage = (failedChannels: Array) => ( - - Failed to send test message for some channels. Please adjust channel settings for {failedChannels.toString()} - -) - -export const getChannelsQueryObject = { - config_type: ['slack', 'email', 'chime', 'webhook', 'sns', 'ses'], - from_index: 0, - max_items: 1000, - sort_field: 'name', - sort_order: 'asc', - feature_list: ['reports'] -} diff --git a/dashboards-reports/public/components/report_definitions/delivery/index.ts b/dashboards-reports/public/components/report_definitions/delivery/index.ts deleted file mode 100644 index 91d85f4a..00000000 --- a/dashboards-reports/public/components/report_definitions/delivery/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ReportDelivery } from './delivery'; diff --git a/dashboards-reports/public/components/report_definitions/edit/edit_report_definition.tsx b/dashboards-reports/public/components/report_definitions/edit/edit_report_definition.tsx deleted file mode 100644 index 3e876931..00000000 --- a/dashboards-reports/public/components/report_definitions/edit/edit_report_definition.tsx +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useState } from 'react'; -import { i18n } from '@osd/i18n'; -import { - EuiButtonEmpty, - EuiFlexGroup, - EuiFlexItem, - EuiButton, - EuiPage, - EuiTitle, - EuiPageBody, - EuiSpacer, - EuiGlobalToastList, -} from '@elastic/eui'; -import { ReportSettings } from '../report_settings'; -import { ReportTrigger } from '../report_trigger'; -import { ReportDefinitionSchemaType } from 'server/model'; -import { converter } from '../utils'; -import { - permissionsMissingToast, - permissionsMissingActions, -} from '../../utils/utils'; -import { definitionInputValidation } from '../utils/utils'; - -export function EditReportDefinition(props: { [x: string]: any; setBreadcrumbs?: any; httpClient?: any; }) { - const [toasts, setToasts] = useState([]); - const [comingFromError, setComingFromError] = useState(false); - const [preErrorData, setPreErrorData] = useState({}); - - const [ - showSettingsReportNameError, - setShowSettingsReportNameError, - ] = useState(false); - const [ - settingsReportNameErrorMessage, - setSettingsReportNameErrorMessage, - ] = useState(''); - const [ - showSettingsReportSourceError, - setShowSettingsReportSourceError, - ] = useState(false); - const [ - settingsReportSourceErrorMessage, - setSettingsReportSourceErrorMessage, - ] = useState(''); - const [ - showTriggerIntervalNaNError, - setShowTriggerIntervalNaNError, - ] = useState(false); - const [showCronError, setShowCronError] = useState(false); - const [showTimeRangeError, setShowTimeRangeError] = useState(false); - - const addPermissionsMissingViewEditPageToastHandler = (errorType: string) => { - let toast = {}; - if (errorType === 'permissions') { - toast = permissionsMissingToast( - permissionsMissingActions.VIEWING_EDIT_PAGE - ); - } else if (errorType === 'API') { - toast = { - title: i18n.translate( - 'opensearch.reports.editReportDefinition.errorLoading', - { defaultMessage: 'Error loading report definition values.' } - ), - color: 'danger', - iconType: 'alert', - id: 'errorToast', - }; - } - // @ts-ignore - setToasts(toasts.concat(toast)); - }; - - const handleViewEditPageErrorToast = (errorType: string) => { - addPermissionsMissingViewEditPageToastHandler(errorType); - }; - - const addInputValidationErrorToastHandler = () => { - const errorToast = { - title: i18n.translate( - 'opensearch.reports.editReportDefinition.fieldsHaveAnError', - { - defaultMessage: - 'One or more fields have an error. Please check and try again.', - } - ), - color: 'danger', - iconType: 'alert', - id: 'errorToast', - }; - // @ts-ignore - setToasts(toasts.concat(errorToast)); - }; - - const handleInputValidationErrorToast = () => { - addInputValidationErrorToastHandler(); - }; - - const addErrorUpdatingReportDefinitionToastHandler = (errorType: string) => { - let toast = {}; - if (errorType === 'permissions') { - toast = permissionsMissingToast( - permissionsMissingActions.UPDATING_DEFINITION - ); - } else if (errorType === 'API') { - toast = { - title: i18n.translate( - 'opensearch.reports.editReportDefinition.errorUpdating', - { defaultMessage: 'Error updating report definition.' } - ), - color: 'danger', - iconType: 'alert', - id: 'errorToast', - }; - } - // @ts-ignore - setToasts(toasts.concat(toast)); - }; - - const handleErrorUpdatingReportDefinitionToast = (errorType: string) => { - addErrorUpdatingReportDefinitionToastHandler(errorType); - }; - - const addErrorDeletingReportDefinitionToastHandler = () => { - const errorToast = { - title: i18n.translate( - 'opensearch.reports.editReportDefinition.errorDeleting', - { defaultMessage: 'Error deleting old scheduled report definition.' } - ), - color: 'danger', - iconType: 'alert', - id: 'errorDeleteToast', - }; - // @ts-ignore - setToasts(toasts.concat(errorToast)); - }; - - const handleErrorDeletingReportDefinitionToast = () => { - addErrorDeletingReportDefinitionToastHandler(); - }; - - const removeToast = (removedToast: { id: any; }) => { - setToasts(toasts.filter((toast: any) => toast.id !== removedToast.id)); - }; - - const reportDefinitionId = props['match']['params']['reportDefinitionId']; - let reportDefinition: ReportDefinitionSchemaType; - let editReportDefinitionRequest = { - report_params: { - report_name: '', - report_source: '', - description: '', - core_params: { - base_url: '', - report_format: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: '', - }, - time_created: 0, - last_updated: 0, - status: '', - }; - reportDefinition = editReportDefinitionRequest; // initialize reportDefinition object - - let timeRange = { - timeFrom: new Date(), - timeTo: new Date(), - }; - - if (comingFromError) { - editReportDefinitionRequest = preErrorData; - } - - const callUpdateAPI = async (metadata) => { - const { httpClient } = props; - httpClient - .put(`../api/reporting/reportDefinitions/${reportDefinitionId}`, { - body: JSON.stringify(metadata), - params: reportDefinitionId.toString(), - }) - .then(async () => { - window.location.assign(`reports-dashboards#/edit=success`); - }) - .catch((error: { body: { statusCode: number; }; }) => { - console.log('error in updating report definition:', error); - if (error.body.statusCode === 400) { - handleInputValidationErrorToast(); - } else if (error.body.statusCode === 403) { - handleErrorUpdatingReportDefinitionToast('permissions'); - } else { - handleErrorUpdatingReportDefinitionToast('API'); - } - setPreErrorData(metadata); - setComingFromError(true); - }); - }; - - const editReportDefinition = async (metadata: { report_params: {core_params: {header: string, footer: string}}}) => { - if ('header' in metadata.report_params.core_params) { - metadata.report_params.core_params.header = converter.makeHtml( - metadata.report_params.core_params.header - ); - } - if ('footer' in metadata.report_params.core_params) { - metadata.report_params.core_params.footer = converter.makeHtml( - metadata.report_params.core_params.footer - ); - } - - // client-side input validation - let error = false; - await definitionInputValidation( - metadata, - error, - setShowSettingsReportNameError, - setSettingsReportNameErrorMessage, - setShowSettingsReportSourceError, - setSettingsReportSourceErrorMessage, - setShowTriggerIntervalNaNError, - timeRange, - setShowTimeRangeError, - setShowCronError, - ).then((response) => { - error = response; - }); - if (error) { - handleInputValidationErrorToast(); - setPreErrorData(metadata); - setComingFromError(true); - } else { - await callUpdateAPI(metadata); - } - }; - - useEffect(() => { - window.scrollTo(0, 0); - const { httpClient } = props; - httpClient - .get(`../api/reporting/reportDefinitions/${reportDefinitionId}`) - .then((response) => { - reportDefinition = response.report_definition; - const { - time_created: timeCreated, - status, - last_updated: lastUpdated, - report_params: { report_name: reportName }, - } = reportDefinition; - // configure non-editable fields - editReportDefinitionRequest.time_created = timeCreated; - editReportDefinitionRequest.last_updated = lastUpdated; - editReportDefinitionRequest.status = status; - - props.setBreadcrumbs([ - { - text: 'Reporting', - href: '#', - }, - { - text: `Report definition details: ${reportName}`, - href: `#/report_definition_details/${reportDefinitionId}`, - }, - { - text: `Edit report definition: ${reportName}`, - }, - ]); - }) - .catch((error: { body: { statusCode: number; }; }) => { - console.error( - 'error when loading edit report definition page: ', - error - ); - if (error.body.statusCode === 403) { - handleViewEditPageErrorToast('permissions'); - } else { - handleViewEditPageErrorToast('API'); - } - }); - }, []); - - return ( - - - -

- {i18n.translate('opensearch.reports.editReportDefinition.title', { - defaultMessage: 'Edit report definition', - })} -

-
- - - - - - { - window.location.assign('reports-dashboards#/'); - }} - > - {i18n.translate( - 'opensearch.reports.editReportDefinition.cancel', - { defaultMessage: 'Cancel' } - )} - - - - editReportDefinition(editReportDefinitionRequest)} - id={'editReportDefinitionButton'} - > - {i18n.translate('opensearch.reports.editReportDefinition.save', { - defaultMessage: 'Save Changes', - })} - - - - -
-
- ); -} diff --git a/dashboards-reports/public/components/report_definitions/edit/index.ts b/dashboards-reports/public/components/report_definitions/edit/index.ts deleted file mode 100644 index bcba3740..00000000 --- a/dashboards-reports/public/components/report_definitions/edit/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { EditReportDefinition } from './edit_report'; diff --git a/dashboards-reports/public/components/report_definitions/report_settings/__tests__/__snapshots__/report_settings.test.tsx.snap b/dashboards-reports/public/components/report_definitions/report_settings/__tests__/__snapshots__/report_settings.test.tsx.snap deleted file mode 100644 index d348db59..00000000 --- a/dashboards-reports/public/components/report_definitions/report_settings/__tests__/__snapshots__/report_settings.test.tsx.snap +++ /dev/null @@ -1,8471 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` panel dashboard create from in-context 1`] = ` -
-
-

- Report settings -

-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
- Valid characters are a-z, A-Z, 0-9, (), [], _ (underscore), - (hyphen) and (space). -
-
-
-
-
-
-
-
-
- -
-
- -
-
- -
-
-
-
-
-
-
- -
-
-
-
-
- - -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
-
- -
-
- -
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-
-
-`; - -exports[` panel display errors on create 1`] = ` -
-
-

- Report settings -

-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
- Valid characters are a-z, A-Z, 0-9, (), [], _ (underscore), - (hyphen) and (space). -
-
-
-
-
-
-
-
-
- -
-
- -
-
- -
-
-
-
-
-
-
- -
-
-
-
-
- - -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
-
- -
-
- -
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-
-
-`; - -exports[` panel render component 1`] = ` -
-
-

- Report settings -

-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
- Valid characters are a-z, A-Z, 0-9, (), [], _ (underscore), - (hyphen) and (space). -
-
-
-
-
-
-
-
-
- -
-
- -
-
- -
-
-
-
-
-
-
- -
-
-
-
-
- - -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
-
- -
-
- -
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-
-
-`; - -exports[` panel visualization create from in-context 1`] = ` -
-
-

- Report settings -

-
-
-
-
-
-
-
- -
-
-
-
- -
-
-
- Valid characters are a-z, A-Z, 0-9, (), [], _ (underscore), - (hyphen) and (space). -
-
-
-
-
-
-
-
-
- -
-
- -
-
- -
-
-
-
-
-
-
- -
-
-
-
-
- - -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
-
- -
-
- -
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-
-
-`; diff --git a/dashboards-reports/public/components/report_definitions/report_settings/__tests__/report_settings.test.tsx b/dashboards-reports/public/components/report_definitions/report_settings/__tests__/report_settings.test.tsx deleted file mode 100644 index 0f7ead8f..00000000 --- a/dashboards-reports/public/components/report_definitions/report_settings/__tests__/report_settings.test.tsx +++ /dev/null @@ -1,837 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { render } from '@testing-library/react'; -import { ReportSettings } from '../report_settings'; -import 'babel-polyfill'; -import 'regenerator-runtime'; -import httpClientMock from '../../../../../test/httpMockClient'; -import { configure, mount, shallow } from 'enzyme'; -import Adapter from 'enzyme-adapter-react-16'; -import { act } from 'react-dom/test-utils'; - -const emptyRequest = { - report_params: { - report_name: '', - report_source: '', - description: '', - core_params: { - base_url: '', - report_format: '', - time_duration: '', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: '', - trigger_params: {}, - }, - time_created: 0, - last_updated: 0, - status: '', -}; - -let timeRange = { - timeFrom: new Date(123456789), - timeTo: new Date(1234567890), -}; - -const dashboardHits = { - hits: [ - { - _id: 'dashboard:abcdefghijklmnop12345', - _source: { - dashboard: { - description: 'mock dashboard value', - hits: 0, - timeFrom: 'now-24h', - timeTo: 'now', - title: 'Mock Dashboard', - }, - notebook: { - name: 'mock notebook name' - } - }, - }, - ], -}; - -const visualizationHits = { - hits: [ - { - _id: 'visualization:abcdefghijklmnop12345', - _source: { - visualization: { - description: 'mock visualization value', - title: 'Mock Visualization', - }, - notebook: { - name: 'mock notebook name' - }, - }, - }, - ], -}; - -const savedSearchHits = { - hits: [ - { - _id: 'search:abcdefghijklmnop12345', - _source: { - search: { - title: 'Mock saved search value', - }, - notebook: { - name: 'mock notebook name' - }, - }, - }, - ], -}; - -describe(' panel', () => { - jest.spyOn(console, 'log').mockImplementation(() => {}); - configure({ adapter: new Adapter() }); - test('render component', () => { - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - }); - - test('render edit, dashboard source', async () => { - const promise = Promise.resolve(); - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: 'test description', - core_params: { - base_url: 'http://localhost:5601/dashboard/abcdefghijklmnop12345', - report_format: 'pdf', - header: 'header content', - footer: 'footer content', - time_duration: 'PT30M', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - enabled: false, - enabled_time: 1234567890, - schedule: { - interval: { - period: 1, - start_time: 123456789, - unit: 'Days' - } - } - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: dashboardHits, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('render edit, visualization source', async () => { - const promise = Promise.resolve(); - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Visualization', - description: 'test description', - core_params: { - base_url: 'http://localhost:5601/edit/abcdefghijklmnop12345', - report_format: 'png', - header: 'header content', - footer: 'footer content', - time_duration: 'PT30M', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - enabled: false, - enabled_time: 1234567890, - schedule: { - interval: { - period: 1, - start_time: 123456789, - unit: 'Days' - } - } - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: visualizationHits, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('render edit, saved search source', async () => { - const promise = Promise.resolve(); - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Saved search', - description: 'test description', - core_params: { - base_url: 'http://localhost:5601/discover/abcdefghijklmnop12345', - report_format: 'csv', - header: 'test header content', - footer: 'test footer content', - time_duration: 'PT30M', - saved_search_id: 'abcdefghijk', - limit: 10000, - excel: true, - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - enabled: false, - enabled_time: 1234567890, - schedule: { - interval: { - period: 1, - start_time: 123456789, - unit: 'Days' - } - } - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: savedSearchHits, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('render edit, dashboard source', async () => { - const promise = Promise.resolve(); - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Saved search', - description: 'test description', - core_params: { - base_url: 'http://localhost:5601', - report_format: 'csv', - header: 'test header content', - footer: 'test footer content', - time_duration: 'PT30M', - saved_search_id: 'abcdefghijk', - limit: 10000, - excel: true, - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - enabled: false, - enabled_time: 1234567890, - schedule: { - interval: { - period: 1, - start_time: 123456789, - unit: 'Days' - } - } - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: dashboardHits, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('render edit, visualization source', async () => { - const promise = Promise.resolve(); - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Saved search', - description: 'test description', - core_params: { - base_url: 'http://localhost:5601', - report_format: 'csv', - header: 'test header content', - footer: 'test footer content', - time_duration: 'PT30M', - saved_search_id: 'abcdefghijk', - limit: 10000, - excel: true, - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - enabled: false, - enabled_time: 1234567890, - schedule: { - interval: { - period: 1, - start_time: 123456789, - unit: 'Days' - } - } - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: visualizationHits, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - - test('dashboard create from in-context', async () => { - window = Object.create(window); - Object.defineProperty(window, 'location', { - configurable: true, - value: { - href: - 'http://localhost:5601/app/reports-dashboards#/create?previous=dashboard:abcdefghijklmnop12345?timeFrom=2020-10-26T20:52:56.382Z?timeTo=2020-10-27T20:52:56.384Z', - }, - }); - - const promise = Promise.resolve(); - - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: 'http://localhost:5601/dashboard/abcdefghijklmnop12345', - report_format: 'png', - header: '', - footer: '', - time_duration: 'PT30M', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - enabled: false, - enabled_time: 1234567890, - schedule: { - interval: { - period: 1, - start_time: 123456789, - unit: 'Days' - } - } - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: dashboardHits, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('visualization create from in-context', async () => { - // @ts-ignore - delete window.location; // reset window.location.href for in-context testing - - window = Object.create(window); - Object.defineProperty(window, 'location', { - configurable: true, - value: { - href: - 'http://localhost:5601/app/reports-dashboards#/create?previous=visualize:abcdefghijklmnop12345?timeFrom=2020-10-26T20:52:56.382Z?timeTo=2020-10-27T20:52:56.384Z', - }, - }); - - const promise = Promise.resolve(); - - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Visualization', - description: '', - core_params: { - base_url: 'http://localhost:5601/edit/abcdefghijklmnop12345', - report_format: 'pdf', - header: '', - footer: '', - time_duration: 'PT30M', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - enabled: false, - enabled_time: 1234567890, - schedule: { - interval: { - period: 1, - start_time: 123456789, - unit: 'Days' - } - } - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: visualizationHits, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('saved search create from in-context', async () => { - // @ts-ignore - delete window.location; // reset window.location.href for in-context testing - - window = Object.create(window); - Object.defineProperty(window, 'location', { - value: { - href: - 'http://localhost:5601/app/reports-dashboards#/create?previous=discover:abcdefghijklmnop12345?timeFrom=2020-10-26T20:52:56.382Z?timeTo=2020-10-27T20:52:56.384Z', - }, - }); - - const promise = Promise.resolve(); - - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Saved search', - description: '', - core_params: { - base_url: 'http://localhost:5601/discover/abcdefghijklmnop12345', - report_format: 'csv', - header: '', - footer: '', - time_duration: 'PT30M', - saved_search_id: 'abcdefghijk', - limit: 10000, - excel: true, - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: {}, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: savedSearchHits, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('simulate click on dashboard combo box', async () => { - const promise = Promise.resolve(); - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Saved search', - description: 'test description', - core_params: { - base_url: 'http://localhost:5601', - report_format: 'csv', - header: 'test header content', - footer: 'test footer content', - time_duration: 'PT30M', - saved_search_id: 'abcdefghijk', - limit: 10000, - excel: true, - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - enabled: false, - enabled_time: 1234567890, - schedule: { - interval: { - period: 1, - start_time: 123456789, - unit: 'Days' - } - } - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: dashboardHits, - }); - - const component = shallow( - - , {disableLifecycleMethods: true}); - await act(() => promise); - - const comboBox = component.find('EuiComboBox').at(0); - comboBox.simulate('change', [{value: 'test', label: 'test'}]); - - await act(() => promise); - }); - - test('simulate click on visualization combo box', async () => { - const promise = Promise.resolve(); - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Visualization', - description: 'test description', - core_params: { - base_url: 'http://localhost:5601', - report_format: 'pdf', - header: 'test header content', - footer: 'test footer content', - time_duration: 'PT30M', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - enabled: false, - enabled_time: 1234567890, - schedule: { - interval: { - period: 1, - start_time: 123456789, - unit: 'Days' - } - } - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: visualizationHits, - }); - - const component = mount( - - ); - await act(() => promise); - - const reportSourceRadio = component.find('EuiRadioGroup').at(0); - const visualizationRadio = reportSourceRadio.find('EuiRadio').at(1); - - visualizationRadio.find('input').simulate('change', 'visualizationReportSource'); - await act(() => promise); - const comboBox = component.find('EuiComboBox').at(0); - - act(() => { - comboBox.props().onChange([{ value: 'test', label: 'test' }]); - }); - component.update(); - - await act(() => promise); - }); - - test('simulate click on saved search combo box', async () => { - const promise = Promise.resolve(); - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Saved search', - description: 'test description', - core_params: { - base_url: 'http://localhost:5601', - report_format: 'pdf', - header: 'test header content', - footer: 'test footer content', - time_duration: 'PT30M', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - enabled: false, - enabled_time: 1234567890, - schedule: { - interval: { - period: 1, - start_time: 123456789, - unit: 'Days' - } - } - }, - }, - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - hits: savedSearchHits, - }); - - const component = mount( - - ); - await act(() => promise); - - const reportSourceRadio = component.find('EuiRadioGroup').at(0); - const visualizationRadio = reportSourceRadio.find('EuiRadio').at(2); - - visualizationRadio.find('input').simulate('change', 'savedSearchReportSource'); - await act(() => promise); - const comboBox = component.find('EuiComboBox').at(0); - - act(() => { - comboBox.props().onChange([{ value: 'test', label: 'test' }]); - }) - component.update(); - - await act(() => promise); - }); - - test('display errors on create', async () => { - const promise = Promise.resolve(); - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); -}); diff --git a/dashboards-reports/public/components/report_definitions/report_settings/__tests__/report_settings_helpers.test.tsx b/dashboards-reports/public/components/report_definitions/report_settings/__tests__/report_settings_helpers.test.tsx deleted file mode 100644 index 9a5b3367..00000000 --- a/dashboards-reports/public/components/report_definitions/report_settings/__tests__/report_settings_helpers.test.tsx +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { - getDashboardBaseUrlCreate, - getDashboardOptions, - getSavedSearchBaseUrlCreate, - getSavedSearchOptions, - getVisualizationBaseUrlCreate, - getVisualizationOptions, - handleDataToVisualReportSourceChange, - parseInContextUrl, -} from '../report_settings_helpers'; - -const TEST_DEFINITION_ID = '12345'; - -describe('report_settings_helpers tests', () => { - test('parseInContextUrl', () => { - const urlString = - 'http://localhost:5601/app/reports-dashboards#/create?previous=dashboard:7adfa750-4c81-11e8-b3d7-01146121b73d?timeFrom=2020-10-26T20:52:56.382Z?timeTo=2020-10-27T20:52:56.384Z'; - - const id = parseInContextUrl(urlString, 'id'); - expect(id).toBe('7adfa750-4c81-11e8-b3d7-01146121b73d'); - - const timeFrom = parseInContextUrl(urlString, 'timeFrom'); - expect(timeFrom).toBe('2020-10-26T20:52:56.382Z'); - - const timeTo = parseInContextUrl(urlString, 'timeTo'); - expect(timeTo).toBe('2020-10-27T20:52:56.384Z'); - - const error = parseInContextUrl(urlString, 'invalid'); - expect(error).toBe('error: invalid parameter'); - }); - - test('getDashboardBaseUrlCreate', () => { - const baseUrl = getDashboardBaseUrlCreate(true, TEST_DEFINITION_ID, true); - expect(baseUrl).toBe('/app/dashboards#/view/'); - - const baseUrlNotFromEdit = getDashboardBaseUrlCreate( - false, - TEST_DEFINITION_ID, - true - ); - expect(baseUrlNotFromEdit).toBe('/app/dashboards#/view/'); - }); - - test('getDashboardBaseUrlCreate not from in-context', () => { - const baseUrl = getDashboardBaseUrlCreate(false, TEST_DEFINITION_ID, false); - expect(baseUrl).toBe('/'); - }) - - test('getVisualizationBaseUrlCreate', () => { - const baseUrl = getVisualizationBaseUrlCreate( - true, - TEST_DEFINITION_ID, - true - ); - expect(baseUrl).toBe('/app/visualize#/edit/'); - - const baseUrlNotFromEdit = getVisualizationBaseUrlCreate( - false, - TEST_DEFINITION_ID, - true - ); - expect(baseUrlNotFromEdit).toBe('/app/visualize#/edit/'); - }); - - test('getVisualizationBaseUrlCreate not from in-context', () => { - const baseUrl = getVisualizationBaseUrlCreate( - false, - TEST_DEFINITION_ID, - false - ); - expect(baseUrl).toBe('/'); - }) - - test('getSavedSearchBaseUrlCreate', () => { - const baseUrl = getSavedSearchBaseUrlCreate(true, TEST_DEFINITION_ID, true); - expect(baseUrl).toBe('/app/discover#/view/'); - - const baseUrlNotFromEdit = getSavedSearchBaseUrlCreate( - false, - TEST_DEFINITION_ID, - true - ); - expect(baseUrlNotFromEdit).toBe('/app/discover#/view/'); - }); - - test('getSavedSearchBaseUrlCreate not from in-context', () => { - const baseUrl = getSavedSearchBaseUrlCreate(false, TEST_DEFINITION_ID, false); - expect(baseUrl).toBe('/'); - }) - - test('getDashboardOptions', () => { - const mockData = [ - { - _id: 'dashboard:1234567890abcdefghijk', - _source: { - dashboard: { - title: 'Mock dashboard title', - }, - }, - }, - ]; - - const options = getDashboardOptions(mockData); - expect(options[0].value).toBe('1234567890abcdefghijk'); - expect(options[0].label).toBe('Mock dashboard title'); - }); - - test('getVisualizationOptions', () => { - const mockData = [ - { - _id: 'visualization:1234567890abcdefghijk', - _source: { - visualization: { - title: 'Mock visualization title', - }, - }, - }, - ]; - - const options = getVisualizationOptions(mockData); - expect(options[0].value).toBe('1234567890abcdefghijk'); - expect(options[0].label).toBe('Mock visualization title'); - }); - - test('getSavedSearchOptions', () => { - const mockData = [ - { - _id: 'search:1234567890abcdefghijk', - _source: { - search: { - title: 'Mock saved search title', - }, - }, - }, - ]; - const options = getSavedSearchOptions(mockData); - expect(options[0].value).toBe('1234567890abcdefghijk'); - expect(options[0].label).toBe('Mock saved search title'); - }); - - test('handleDataToVisualReportSourceChange', () => { - let reportDefinitionRequest = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - report_format: '', - saved_search_id: '', - limit: 10, - excel: true, - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: {}, - }, - }; - - handleDataToVisualReportSourceChange(reportDefinitionRequest); - expect( - reportDefinitionRequest.report_params.core_params.report_format - ).toBe('pdf'); - expect(reportDefinitionRequest.report_params.core_params).toMatchObject({ - report_format: 'pdf', - }); - }); -}); diff --git a/dashboards-reports/public/components/report_definitions/report_settings/index.ts b/dashboards-reports/public/components/report_definitions/report_settings/index.ts deleted file mode 100644 index 2b410f03..00000000 --- a/dashboards-reports/public/components/report_definitions/report_settings/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ReportSettings } from './report_settings'; diff --git a/dashboards-reports/public/components/report_definitions/report_settings/report_settings.tsx b/dashboards-reports/public/components/report_definitions/report_settings/report_settings.tsx deleted file mode 100644 index 0db86cfd..00000000 --- a/dashboards-reports/public/components/report_definitions/report_settings/report_settings.tsx +++ /dev/null @@ -1,926 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useState } from 'react'; -import { i18n } from '@osd/i18n'; -import { - EuiFieldText, - EuiFlexGroup, - EuiFlexItem, - EuiFormRow, - EuiPageHeader, - EuiTitle, - EuiPageContent, - EuiPageContentBody, - EuiHorizontalRule, - EuiText, - EuiSpacer, - EuiRadioGroup, - EuiSelect, - EuiTextArea, - EuiCheckboxGroup, - EuiComboBox, -} from '@elastic/eui'; -import { - REPORT_SOURCE_RADIOS, - PDF_PNG_FILE_FORMAT_OPTIONS, - HEADER_FOOTER_CHECKBOX, - REPORT_SOURCE_TYPES, -} from './report_settings_constants'; -import Showdown from 'showdown'; -import ReactMde from 'react-mde'; -import 'react-mde/lib/styles/css/react-mde-all.css'; -import { - reportDefinitionParams, - timeRangeParams, -} from '../create/create_report_definition'; -import { - parseInContextUrl, - getSavedSearchBaseUrlCreate, - getVisualizationBaseUrlCreate, - getSavedSearchOptions, - getVisualizationOptions, - getDashboardBaseUrlCreate, - getDashboardOptions, - handleDataToVisualReportSourceChange, - getNotebooksOptions, - getNotebooksBaseUrlCreate, - getReportSourceFromURL, -} from './report_settings_helpers'; -import { TimeRangeSelect } from './time_range'; -import { converter } from '../utils'; -import { ReportDefinitionSchemaType } from 'server/model'; -import { ReportTrigger } from '../report_trigger'; - -type ReportSettingProps = { - edit: boolean; - editDefinitionId: string; - reportDefinitionRequest: reportDefinitionParams; - httpClientProps: any; - timeRange: timeRangeParams; - showSettingsReportNameError: boolean; - settingsReportNameErrorMessage: string; - showSettingsReportSourceError: boolean; - settingsReportSourceErrorMessage: string; - showTimeRangeError: boolean; - showTriggerIntervalNaNError: boolean; - showCronError: boolean; -}; - -export function ReportSettings(props: ReportSettingProps) { - const { - edit, - editDefinitionId, - reportDefinitionRequest, - httpClientProps, - timeRange, - showSettingsReportNameError, - settingsReportNameErrorMessage, - showSettingsReportSourceError, - settingsReportSourceErrorMessage, - showTimeRangeError, - showTriggerIntervalNaNError, - showCronError - } = props; - - const [reportName, setReportName] = useState(''); - const [reportDescription, setReportDescription] = useState(''); - const [reportSourceId, setReportSourceId] = useState('dashboardReportSource'); - - const [dashboardSourceSelect, setDashboardSourceSelect] = useState([] as any); - const [dashboards, setDashboards] = useState([] as any); - - const [visualizationSourceSelect, setVisualizationSourceSelect] = useState( - [] as any - ); - const [visualizations, setVisualizations] = useState([] as any); - - const [savedSearchSourceSelect, setSavedSearchSourceSelect] = useState( - [] as any - ); - const [savedSearches, setSavedSearches] = useState([] as any); - - const [notebooksSourceSelect, setNotebooksSourceSelect] = useState([] as any); - const [notebooks, setNotebooks] = useState([] as any); - - const [fileFormat, setFileFormat] = useState('pdf'); - - const handleDashboards = (e) => { - setDashboards(e); - }; - - const handleVisualizations = (e) => { - setVisualizations(e); - }; - - const handleSavedSearches = (e) => { - setSavedSearches(e); - }; - - const handleNotebooks = (e) => { - setNotebooks(e); - }; - - const handleReportName = (e: { - target: { value: React.SetStateAction }; - }) => { - setReportName(e.target.value); - reportDefinitionRequest.report_params.report_name = e.target.value.toString(); - }; - - const handleReportDescription = (e: { - target: { value: React.SetStateAction }; - }) => { - setReportDescription(e.target.value); - reportDefinitionRequest.report_params.description = e.target.value.toString(); - }; - - const handleReportSource = (e: React.SetStateAction) => { - setReportSourceId(e); - let fromInContext = false; - if (window.location.href.includes('?')) { - fromInContext = true; - } - if (e === 'dashboardReportSource') { - reportDefinitionRequest.report_params.report_source = 'Dashboard'; - reportDefinitionRequest.report_params.core_params.base_url = - getDashboardBaseUrlCreate(edit, editDefinitionId, fromInContext) + - dashboards[0]?.value; - - // set params to visual report params after switch from saved search - handleDataToVisualReportSourceChange(reportDefinitionRequest); - setFileFormat('pdf'); - } else if (e === 'visualizationReportSource') { - reportDefinitionRequest.report_params.report_source = 'Visualization'; - reportDefinitionRequest.report_params.core_params.base_url = - getVisualizationBaseUrlCreate(edit, editDefinitionId, fromInContext) + - visualizations[0]?.value; - - // set params to visual report params after switch from saved search - handleDataToVisualReportSourceChange(reportDefinitionRequest); - setFileFormat('pdf'); - } else if (e === 'savedSearchReportSource') { - reportDefinitionRequest.report_params.report_source = 'Saved search'; - reportDefinitionRequest.report_params.core_params.base_url = - getSavedSearchBaseUrlCreate(edit, editDefinitionId, fromInContext) + - savedSearches[0]?.value; - reportDefinitionRequest.report_params.core_params.saved_search_id = - savedSearches[0]?.value; - reportDefinitionRequest.report_params.core_params.report_format = 'csv'; - reportDefinitionRequest.report_params.core_params.limit = 10000; - reportDefinitionRequest.report_params.core_params.excel = true; - } else if (e === 'notebooksReportSource') { - reportDefinitionRequest.report_params.report_source = 'Notebook'; - reportDefinitionRequest.report_params.core_params.base_url = - getNotebooksBaseUrlCreate(edit, editDefinitionId, fromInContext) + - notebooks[0]?.value; - - // set params to visual report params after switch from saved search - handleDataToVisualReportSourceChange(reportDefinitionRequest); - setFileFormat('pdf'); - } - }; - - const handleDashboardSelect = (e: string | any[]) => { - setDashboardSourceSelect(e); - - let fromInContext = false; - if (window.location.href.includes('?')) { - fromInContext = true; - } - - if (e.length > 0) { - reportDefinitionRequest.report_params.core_params.base_url = - getDashboardBaseUrlCreate(edit, editDefinitionId, fromInContext) + - e[0].value; - } else { - reportDefinitionRequest.report_params.core_params.base_url = ''; - } - }; - - const handleVisualizationSelect = (e) => { - setVisualizationSourceSelect(e); - let fromInContext = false; - if (window.location.href.includes('?')) { - fromInContext = true; - } - - if (e.length > 0) { - reportDefinitionRequest.report_params.core_params.base_url = - getVisualizationBaseUrlCreate(edit, editDefinitionId, fromInContext) + - e[0].value; - } else { - reportDefinitionRequest.report_params.core_params.base_url = ''; - } - }; - - const handleSavedSearchSelect = (e) => { - setSavedSearchSourceSelect(e); - let fromInContext = false; - if (window.location.href.includes('?')) { - fromInContext = true; - } - if (e.length > 0) { - reportDefinitionRequest.report_params.core_params.saved_search_id = - e[0].value; - - reportDefinitionRequest.report_params.core_params.base_url = - getSavedSearchBaseUrlCreate(edit, editDefinitionId, fromInContext) + - e[0].value; - } else { - reportDefinitionRequest.report_params.core_params.base_url = ''; - } - }; - - const handleNotebooksSelect = (e) => { - setNotebooksSourceSelect(e); - let fromInContext = false; - if (window.location.href.includes('?')) { - fromInContext = true; - } - if (e.length > 0) { - reportDefinitionRequest.report_params.core_params.base_url = - getNotebooksBaseUrlCreate(edit, editDefinitionId, fromInContext) + - e[0].value; - } else { - reportDefinitionRequest.report_params.core_params.base_url = ''; - } - }; - - const handleFileFormat = (e: React.SetStateAction) => { - setFileFormat(e); - reportDefinitionRequest.report_params.core_params.report_format = e.toString(); - }; - - const PDFandPNGFileFormats = () => { - return ( -
- - - -
- ); - }; - - const SettingsMarkdown = () => { - const [ - checkboxIdSelectHeaderFooter, - setCheckboxIdSelectHeaderFooter, - ] = useState({ ['header']: false, ['footer']: false }); - - const [footer, setFooter] = useState(''); - const [selectedTabFooter, setSelectedTabFooter] = React.useState< - 'write' | 'preview' - >('write'); - - const [header, setHeader] = useState(''); - const [selectedTabHeader, setSelectedTabHeader] = React.useState< - 'write' | 'preview' - >('write'); - - const handleHeader = (e) => { - setHeader(e); - reportDefinitionRequest.report_params.core_params.header = e; - }; - - const handleFooter = (e) => { - setFooter(e); - reportDefinitionRequest.report_params.core_params.footer = e; - }; - - const handleCheckboxHeaderFooter = (optionId) => { - const newCheckboxIdToSelectedMap = { - ...checkboxIdSelectHeaderFooter, - ...{ - [optionId]: !checkboxIdSelectHeaderFooter[optionId], - }, - }; - setCheckboxIdSelectHeaderFooter(newCheckboxIdToSelectedMap); - }; - - const showFooter = checkboxIdSelectHeaderFooter.footer ? ( - - - Promise.resolve(converter.makeHtml(markdown)) - } - /> - - ) : null; - - const showHeader = checkboxIdSelectHeaderFooter.header ? ( - - - Promise.resolve(converter.makeHtml(markdown)) - } - /> - - ) : null; - - useEffect(() => { - let unmounted = false; - if (edit) { - httpClientProps - .get(`../api/reporting/reportDefinitions/${editDefinitionId}`) - .then(async (response: {}) => { - const reportDefinition: ReportDefinitionSchemaType = - response.report_definition; - const { - report_params: { - core_params: { header, footer }, - }, - } = reportDefinition; - // set header/footer default - if (header) { - checkboxIdSelectHeaderFooter.header = true; - if (!unmounted) { - setHeader(header); - } - } - if (footer) { - checkboxIdSelectHeaderFooter.footer = true; - if (!unmounted) { - setFooter(footer); - } - } - }) - .catch((error: any) => { - console.error( - 'error in fetching report definition details:', - error - ); - }); - } else { - // keeps header/footer from re-rendering empty when other fields in Report Settings are changed - checkboxIdSelectHeaderFooter.header = - 'header' in reportDefinitionRequest.report_params.core_params; - checkboxIdSelectHeaderFooter.footer = - 'footer' in reportDefinitionRequest.report_params.core_params; - if (checkboxIdSelectHeaderFooter.header) { - setHeader(reportDefinitionRequest.report_params.core_params.header); - } - if (checkboxIdSelectHeaderFooter.footer) { - setFooter(reportDefinitionRequest.report_params.core_params.footer); - } - } - return () => { - unmounted = true; - }; - }, []); - - return ( -
- - - {showHeader} - {showFooter} -
- ); - }; - - const VisualReportFormatAndMarkdown = () => { - return ( -
- - -
- ); - }; - - const setReportSourceDropdownOption = (options, reportSource, url) => { - let index = 0; - if (reportSource === REPORT_SOURCE_TYPES.dashboard) { - for (index = 0; index < options.dashboard.length; ++index) { - if (url.includes(options.dashboard[index].value)) { - setDashboardSourceSelect([options.dashboard[index]]); - } - } - } else if (reportSource === REPORT_SOURCE_TYPES.visualization) { - for (index = 0; index < options.visualizations.length; ++index) { - if (url.includes(options.visualizations[index].value)) { - setVisualizationSourceSelect([options.visualizations[index]]); - } - } - } else if (reportSource === REPORT_SOURCE_TYPES.savedSearch) { - for (index = 0; index < options.savedSearch.length; ++index) { - if (url.includes(options.savedSearch[index].value)) { - setSavedSearchSourceSelect([options.savedSearch[index]]); - } - } - } - }; - - const setDefaultFileFormat = (fileFormat) => { - let index = 0; - for (index = 0; index < PDF_PNG_FILE_FORMAT_OPTIONS.length; ++index) { - if ( - fileFormat.toUpperCase() === PDF_PNG_FILE_FORMAT_OPTIONS[index].label - ) { - setFileFormat(PDF_PNG_FILE_FORMAT_OPTIONS[index].id); - } - } - }; - - const setDashboardFromInContextMenu = (response, id) => { - let index; - for (index = 0; index < response.dashboard.length; ++index) { - if (id === response.dashboard[index].value) { - setDashboardSourceSelect([response.dashboard[index]]); - } - } - }; - - const setVisualizationFromInContextMenu = (response, id) => { - let index; - for (index = 0; index < response.visualizations.length; ++index) { - if (id === response.visualizations[index].value) { - setVisualizationSourceSelect([response.visualizations[index]]); - } - } - }; - - const setSavedSearchFromInContextMenu = (response, id) => { - let index; - for (index = 0; index < response.savedSearch.length; ++index) { - if (id === response.savedSearch[index].value) { - setSavedSearchSourceSelect([response.savedSearch[index]]); - } - } - }; - - const setNotebookFromInContextMenu = (response, id) => { - for (let index = 0; index < response.notebooks.length; ++index) { - if (id === response.notebooks[index].value) { - setNotebooksSourceSelect([response.notebooks[index]]); - } - } - }; - - const setInContextDefaultConfiguration = (response) => { - const url = window.location.href; - const source = getReportSourceFromURL(url); - const id = parseInContextUrl(url, 'id'); - if (source === 'dashboard') { - setReportSourceId('dashboardReportSource'); - reportDefinitionRequest.report_params.report_source = - REPORT_SOURCE_RADIOS[0].label; - - setDashboardFromInContextMenu(response, id); - reportDefinitionRequest.report_params.core_params.base_url = - getDashboardBaseUrlCreate(edit, id, true) + id; - } else if (source === 'visualize') { - setReportSourceId('visualizationReportSource'); - reportDefinitionRequest.report_params.report_source = - REPORT_SOURCE_RADIOS[1].label; - - setVisualizationFromInContextMenu(response, id); - reportDefinitionRequest.report_params.core_params.base_url = - getVisualizationBaseUrlCreate(edit, editDefinitionId, true) + id; - } else if (source === 'discover') { - setReportSourceId('savedSearchReportSource'); - reportDefinitionRequest.report_params.core_params.report_format = 'csv'; - reportDefinitionRequest.report_params.core_params.saved_search_id = id; - reportDefinitionRequest.report_params.report_source = - REPORT_SOURCE_RADIOS[2].label; - - setSavedSearchFromInContextMenu(response, id); - reportDefinitionRequest.report_params.core_params.base_url = - getSavedSearchBaseUrlCreate(edit, editDefinitionId, true) + id; - } else if (source === 'notebook') { - setReportSourceId('notebooksReportSource'); - reportDefinitionRequest.report_params.report_source = - REPORT_SOURCE_RADIOS[3].label; - - setNotebookFromInContextMenu(response, id); - reportDefinitionRequest.report_params.core_params.base_url = - getNotebooksBaseUrlCreate(edit, id, true) + id; - // set placeholder time range since notebooks doesn't use it - reportDefinitionRequest.report_params.core_params.time_duration = 'PT30M'; - } - }; - - const setDefaultEditValues = async (response, reportSourceOptions) => { - setReportName(response.report_definition.report_params.report_name); - setReportDescription(response.report_definition.report_params.description); - reportDefinitionRequest.report_params.report_name = - response.report_definition.report_params.report_name; - reportDefinitionRequest.report_params.description = - response.report_definition.report_params.description; - reportDefinitionRequest.report_params = - response.report_definition.report_params; - const reportSource = response.report_definition.report_params.report_source; - REPORT_SOURCE_RADIOS.map((radio) => { - if (radio.label === reportSource) { - setReportSourceId(radio.id); - reportDefinitionRequest.report_params.report_source = reportSource; - } - }); - setDefaultFileFormat( - response.report_definition.report_params.core_params.report_format - ); - setReportSourceDropdownOption( - reportSourceOptions, - reportSource, - response.report_definition.report_params.core_params.base_url - ); - }; - - const defaultConfigurationEdit = async (httpClientProps) => { - let editData = {}; - await httpClientProps - .get(`../api/reporting/reportDefinitions/${editDefinitionId}`) - .then(async (response: {}) => { - editData = response; - }) - .catch((error: any) => { - console.error('error in fetching report definition details:', error); - }); - return editData; - }; - - const defaultConfigurationCreate = async (httpClientProps) => { - let reportSourceOptions = { - dashboard: [], - visualizations: [], - savedSearch: [], - notebooks: [], - }; - reportDefinitionRequest.report_params.core_params.report_format = fileFormat; - await httpClientProps - .get('../api/reporting/getReportSource/dashboard') - .then(async (response) => { - let dashboardOptions = getDashboardOptions(response['hits']['hits']); - reportSourceOptions.dashboard = dashboardOptions; - handleDashboards(dashboardOptions); - if (!edit) { - reportDefinitionRequest.report_params.report_source = 'Dashboard'; - } - }) - .catch((error) => { - console.log('error when fetching dashboards:', error); - }); - - await httpClientProps - .get('../api/reporting/getReportSource/visualization') - .then(async (response) => { - let visualizationOptions = getVisualizationOptions( - response['hits']['hits'] - ); - reportSourceOptions.visualizations = visualizationOptions; - await handleVisualizations(visualizationOptions); - }) - .catch((error) => { - console.log('error when fetching visualizations:', error); - }); - - await httpClientProps - .get('../api/reporting/getReportSource/search') - .then(async (response) => { - let savedSearchOptions = getSavedSearchOptions( - response['hits']['hits'] - ); - reportSourceOptions.savedSearch = savedSearchOptions; - await handleSavedSearches(savedSearchOptions); - }) - .catch((error) => { - console.log('error when fetching saved searches:', error); - }); - - await httpClientProps - .get('../api/observability/notebooks/') - .catch((error: any) => { - console.error('error fetching notebooks, retrying with legacy api', error) - return httpClientProps.get('../api/notebooks/') - }) - .then(async (response: any) => { - let notebooksOptions = getNotebooksOptions(response.data); - reportSourceOptions.notebooks = notebooksOptions; - await handleNotebooks(notebooksOptions); - }) - .catch((error) => { - console.log('error when fetching notebooks:', error); - }); - return reportSourceOptions; - }; - - useEffect(() => { - let reportSourceOptions = {}; - let editData = {}; - if (edit) { - defaultConfigurationEdit(httpClientProps).then(async (response) => { - editData = response; - }); - } - defaultConfigurationCreate(httpClientProps).then(async (response) => { - reportSourceOptions = response; - // if coming from in-context menu - if (window.location.href.indexOf('?') > -1) { - setInContextDefaultConfiguration(response); - } - if (edit) { - setDefaultEditValues(editData, reportSourceOptions); - } - }); - }, []); - - const displayDashboardSelect = - reportSourceId === 'dashboardReportSource' ? ( -
- - - - -
- ) : null; - - const displayVisualizationSelect = - reportSourceId === 'visualizationReportSource' ? ( -
- - - - -
- ) : null; - - const displaySavedSearchSelect = - reportSourceId === 'savedSearchReportSource' ? ( -
- - - - -
- ) : null; - - const displayVisualReportsFormatAndMarkdown = - reportSourceId != 'savedSearchReportSource' ? ( -
- - -
- ) : ( -
- - -

CSV

-
-
-
- ); - - const displayNotebooksSelect = - reportSourceId === 'notebooksReportSource' ? ( -
- - - - -
- ) : null; - - const displayTimeRangeSelect = - reportSourceId != 'notebooksReportSource' ? ( -
- - -
- ) : null; - - return ( - - - -

- {i18n.translate( - 'opensearch.reports.reportSettingProps.form.reportSettings', - { defaultMessage: 'Report settings' } - )} -

-
-
- - - - - - - - - - - - - - - - - - - - - - {displayDashboardSelect} - {displayVisualizationSelect} - {displaySavedSearchSelect} - {/* - */} - {displayNotebooksSelect} - {displayTimeRangeSelect} - {displayVisualReportsFormatAndMarkdown} - - - -
- ); -} diff --git a/dashboards-reports/public/components/report_definitions/report_settings/report_settings_constants.tsx b/dashboards-reports/public/components/report_definitions/report_settings/report_settings_constants.tsx deleted file mode 100644 index 824892f1..00000000 --- a/dashboards-reports/public/components/report_definitions/report_settings/report_settings_constants.tsx +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { i18n } from '@osd/i18n'; - -export const REPORT_SOURCE_RADIOS = [ - { - id: 'dashboardReportSource', - label: i18n.translate( - 'opensearch.reports.settings.constants.reportSourceRadios.dashboard', - { defaultMessage: 'Dashboard' } - ), - }, - { - id: 'visualizationReportSource', - label: i18n.translate( - 'opensearch.reports.settings.constants.reportSourceRadios.visualization', - { defaultMessage: 'Visualization' } - ), - }, - { - id: 'savedSearchReportSource', - label: i18n.translate( - 'opensearch.reports.settings.constants.reportSourceRadios.savedSearch', - { defaultMessage: 'Saved search' } - ), - }, - { - id: 'notebooksReportSource', - label: 'Notebook', - }, -]; - -export const PDF_PNG_FILE_FORMAT_OPTIONS = [ - { - id: 'pdf', - label: 'PDF', - }, - { - id: 'png', - label: 'PNG', - }, -]; - -export const SAVED_SEARCH_FORMAT_OPTIONS = [ - { - id: 'csvFormat', - label: 'CSV', - }, - { - id: 'xlsFormat', - label: 'XLS', - }, -]; - -export const HEADER_FOOTER_CHECKBOX = [ - { - id: 'header', - label: i18n.translate( - 'opensearch.reports.settings.constants.headerFooterCheckbox.addHeader', - { defaultMessage: 'Add header' } - ), - }, - { - id: 'footer', - label: i18n.translate( - 'opensearch.reports.settings.constants.headerFooterCheckbox.addFooter', - { defaultMessage: 'Add footer' } - ), - }, -]; -export const REPORT_SOURCE_TYPES = { - dashboard: 'Dashboard', - visualization: 'Visualization', - savedSearch: 'Saved search', - notebook: 'Notebook', -}; - -export const commonTimeRanges = [ - { - start: 'now/d', - end: 'now', - label: i18n.translate( - 'opensearch.reports.settings.constants.commonTimeRanges.todaySoFar', - { defaultMessage: 'Today so far' } - ), - }, - { - start: 'now/w', - end: 'now', - label: i18n.translate( - 'opensearch.reports.settings.constants.commonTimeRanges.weekToDate', - { defaultMessage: 'Week to date' } - ), - }, - { - start: 'now/M', - end: 'now', - label: i18n.translate( - 'opensearch.reports.settings.constants.commonTimeRanges.monthToDate', - { defaultMessage: 'Month to date' } - ), - }, - { - start: 'now/y', - end: 'now', - label: i18n.translate( - 'opensearch.reports.settings.constants.commonTimeRanges.yearToDate', - { defaultMessage: 'Year to date' } - ), - }, -]; diff --git a/dashboards-reports/public/components/report_definitions/report_settings/report_settings_helpers.tsx b/dashboards-reports/public/components/report_definitions/report_settings/report_settings_helpers.tsx deleted file mode 100644 index cc4ef232..00000000 --- a/dashboards-reports/public/components/report_definitions/report_settings/report_settings_helpers.tsx +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const parseInContextUrl = (url: string, parameter: string) => { - const info = url.split('?'); - if (parameter === 'id') { - return info[1].substring(info[1].indexOf(':') + 1, info[1].length); - } else if (parameter === 'timeFrom') { - return info[2].substring(info[2].indexOf('=') + 1, info[2].length); - } else if (parameter === 'timeTo') { - return info[3].substring(info[3].indexOf('=') + 1, info[3].length); - } - return 'error: invalid parameter'; -}; - -export const getDashboardBaseUrlCreate = ( - edit: boolean, - editDefinitionId: string, - fromInContext: boolean -) => { - let baseUrl; - if (!fromInContext) { - baseUrl = location.pathname + location.hash; - } else { - baseUrl = '/app/dashboards#/view/'; - } - if (edit) { - return baseUrl.replace( - `reports-dashboards#/edit/${editDefinitionId}`, - 'dashboards#/view/' - ); - } else if (fromInContext) { - return baseUrl; - } - return baseUrl.replace( - 'reports-dashboards#/create', - 'dashboards#/view/' - ); -}; - -export const getVisualizationBaseUrlCreate = ( - edit: boolean, - editDefinitionId: string, - fromInContext: boolean -) => { - let baseUrl; - if (!fromInContext) { - baseUrl = location.pathname + location.hash; - } else { - baseUrl = '/app/visualize#/edit/'; - } - if (edit) { - return baseUrl.replace( - `reports-dashboards#/edit/${editDefinitionId}`, - 'visualize#/edit/' - ); - } else if (fromInContext) { - return baseUrl; - } - return baseUrl.replace( - 'reports-dashboards#/create', - 'visualize#/edit/' - ); -}; - -export const getSavedSearchBaseUrlCreate = ( - edit: boolean, - editDefinitionId: string, - fromInContext: boolean -) => { - let baseUrl; - if (!fromInContext) { - baseUrl = location.pathname + location.hash; - } else { - baseUrl = '/app/discover#/view/'; - } - if (edit) { - return baseUrl.replace( - `reports-dashboards#/edit/${editDefinitionId}`, - 'discover#/view/' - ); - } else if (fromInContext) { - return baseUrl; - } - return baseUrl.replace( - 'reports-dashboards#/create', - 'discover#/view/' - ); -}; - -export const getNotebooksBaseUrlCreate = ( - edit: boolean, - editDefinitionId: string, - fromInContext: boolean -) => { - let baseUrl; - if (!fromInContext) { - baseUrl = location.pathname + location.hash; - } else { - baseUrl = '/app/notebooks-dashboards?view=output_only#/'; - } - if (edit) { - return baseUrl.replace( - `reports-dashboards#/edit/${editDefinitionId}`, - 'notebooks-dashboards?view=output_only#/' - ); - } else if (fromInContext) { - return baseUrl; - } - return baseUrl.replace( - 'reports-dashboards#/create', - 'notebooks-dashboards?view=output_only#/' - ); -} - -export const getDashboardOptions = (data: string | any[]) => { - let index; - let dashboard_options = []; - for (index = 0; index < data.length; ++index) { - let entry = { - value: data[index]['_id'].substring(10), - label: data[index]['_source']['dashboard']['title'], - }; - dashboard_options.push(entry); - } - return dashboard_options; -}; - -export const getVisualizationOptions = (data: string | any[]) => { - let index; - let options = []; - for (index = 0; index < data.length; ++index) { - let entry = { - value: data[index]['_id'].substring(14), - label: data[index]['_source']['visualization']['title'], - }; - options.push(entry); - } - return options; -}; - -export const getSavedSearchOptions = (data: string | any[]) => { - let index; - let options = []; - for (index = 0; index < data.length; ++index) { - let entry = { - value: data[index]['_id'].substring(7), - label: data[index]['_source']['search']['title'], - }; - options.push(entry); - } - return options; -}; - -export const getNotebooksOptions = (data: any) => { - let index; - let options = []; - for (index = 0; index < data.length; ++index) { - let entry = { - value: data[index]['id'], - label: data[index]['path'] - } - options.push(entry); - } - return options; -} - -export const handleDataToVisualReportSourceChange = ( - reportDefinitionRequest -) => { - delete reportDefinitionRequest.report_params.core_params.saved_search_id; - delete reportDefinitionRequest.report_params.core_params.limit; - delete reportDefinitionRequest.report_params.core_params.excel; - reportDefinitionRequest.report_params.core_params.report_format = 'pdf'; -}; - -export const getReportSourceFromURL = (url: string) => { - const source = url.split('?')[1].match(/previous=(.*):/); - return source![1]; -} \ No newline at end of file diff --git a/dashboards-reports/public/components/report_definitions/report_settings/time_range.tsx b/dashboards-reports/public/components/report_definitions/report_settings/time_range.tsx deleted file mode 100644 index f27630c6..00000000 --- a/dashboards-reports/public/components/report_definitions/report_settings/time_range.tsx +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import moment from 'moment'; -import React, { useState, useEffect } from 'react'; -import { i18n } from '@osd/i18n'; -import { parseInContextUrl } from './report_settings_helpers'; -import dateMath from '@elastic/datemath'; -import { - EuiFormRow, - EuiGlobalToastList, - EuiSuperDatePicker, -} from '@elastic/eui'; -import { commonTimeRanges } from './report_settings_constants'; - -export function TimeRangeSelect(props) { - const { - reportDefinitionRequest, - timeRange, - edit, - id, - httpClientProps, - showTimeRangeError, - } = props; - - const [recentlyUsedRanges, setRecentlyUsedRanges] = useState([]); - const [isLoading, setIsLoading] = useState(false); - const [start, setStart] = useState('now-30m'); - const [end, setEnd] = useState('now'); - - const [toasts, setToasts] = useState([]); - - const addInvalidTimeRangeToastHandler = () => { - const errorToast = { - title: i18n.translate('opensearch.reports.timeRange.invalidTimeRange', { - defaultMessage: 'Invalid time range selected.', - }), - color: 'danger', - iconType: 'alert', - id: 'timeRangeErrorToast', - }; - setToasts(toasts.concat(errorToast)); - }; - - const handleInvalidTimeRangeToast = () => { - addInvalidTimeRangeToastHandler(); - }; - - const removeToast = (removedToast) => { - setToasts(toasts.filter((toast) => toast.id !== removedToast.id)); - }; - - const isValidTimeRange = ( - timeRangeMoment: number | moment.Moment, - limit: string, - handleInvalidTimeRangeToast: any - ) => { - if (limit === 'start') { - if (!timeRangeMoment || !timeRangeMoment.isValid()) { - handleInvalidTimeRangeToast(); - } - } else if (limit === 'end') { - if ( - !timeRangeMoment || - !timeRangeMoment.isValid() || - timeRangeMoment > moment.now() - ) { - handleInvalidTimeRangeToast(); - } - } - }; - - const setDefaultEditTimeRange = (duration, unmounted) => { - let time_difference = moment.now() - duration; - const fromDate = new Date(time_difference); - parseTimeRange(fromDate, end, reportDefinitionRequest); - if (!unmounted) { - setStart(fromDate.toISOString()); - setEnd(end); - } - }; - - // valid time range check for absolute time end date - const checkValidAbsoluteEndDate = (end) => { - let endDate = new Date(end); - let nowDate = new Date(moment.now()); - let valid = true; - if (endDate.getTime() > nowDate.getTime()) { - end = 'now'; - valid = false; - } - return valid; - }; - - useEffect(() => { - let unmounted = false; - // if we are coming from the in-context menu - if (window.location.href.indexOf('?') > -1) { - const url = window.location.href; - const timeFrom = parseInContextUrl(url, 'timeFrom'); - const timeTo = parseInContextUrl(url, 'timeTo'); - parseTimeRange(timeFrom, timeTo, reportDefinitionRequest); - if (!unmounted) { - setStart(timeFrom); - setEnd(timeTo); - } - } else { - if (edit) { - httpClientProps - .get(`../api/reporting/reportDefinitions/${id}`) - .then(async (response: {}) => { - let duration = - response.report_definition.report_params.core_params - .time_duration; - duration = moment.duration(duration); - setDefaultEditTimeRange(duration, unmounted); - }) - .catch((error) => { - console.error( - 'error in fetching report definition details:', - error - ); - }); - } else { - parseTimeRange(start, end, reportDefinitionRequest); - } - } - return () => { - unmounted = true; - }; - }, []); - - const onTimeChange = ({ start, end }) => { - isValidTimeRange( - dateMath.parse(start), - 'start', - handleInvalidTimeRangeToast - ); - isValidTimeRange( - dateMath.parse(end, { roundUp: true }), - 'end', - handleInvalidTimeRangeToast - ); - - const recentlyUsedRange = recentlyUsedRanges.filter((recentlyUsedRange) => { - const isDuplicate = - recentlyUsedRange.start === start && recentlyUsedRange.end === end; - return !isDuplicate; - }); - const validEndDate = checkValidAbsoluteEndDate(end); - if (!validEndDate) { - handleInvalidTimeRangeToast(); - return; - } - - recentlyUsedRange.unshift({ start, end }); - setStart(start); - setEnd(end); - setRecentlyUsedRanges( - recentlyUsedRange.length > 10 - ? recentlyUsedRange.slice(0, 9) - : recentlyUsedRange - ); - setIsLoading(true); - startLoading(); - parseTimeRange(start, end, reportDefinitionRequest); - }; - - const parseTimeRange = (start, end, reportDefinitionRequest) => { - timeRange.timeFrom = dateMath.parse(start); - timeRange.timeTo = dateMath.parse(end); - const timeDuration = moment.duration( - dateMath.parse(end).diff(dateMath.parse(start)) - ); - reportDefinitionRequest.report_params.core_params.time_duration = timeDuration.toISOString(); - }; - - const startLoading = () => { - setTimeout(stopLoading, 1000); - }; - - const stopLoading = () => { - setIsLoading(false); - }; - - return ( -
-
- - - -
-
- -
-
- ); -} diff --git a/dashboards-reports/public/components/report_definitions/report_trigger/__tests__/__snapshots__/report_trigger.test.tsx.snap b/dashboards-reports/public/components/report_definitions/report_trigger/__tests__/__snapshots__/report_trigger.test.tsx.snap deleted file mode 100644 index c0973df4..00000000 --- a/dashboards-reports/public/components/report_definitions/report_trigger/__tests__/__snapshots__/report_trigger.test.tsx.snap +++ /dev/null @@ -1,421 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` panel Render edit on-demand component 1`] = ` -
-
-
- -
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-`; - -exports[` panel render create component 1`] = ` -
-
-
- -
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-`; - -exports[` panel render edit Cron schedule component 1`] = ` -
-
-
- -
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-`; - -exports[` panel render edit recurring 5 hours schedule component 1`] = ` -
-
-
- -
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-`; - -exports[` panel render edit recurring 10 minutes schedule component 1`] = ` -
-
-
- -
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-`; - -exports[` panel render edit recurring daily schedule component 1`] = ` -
-
-
- -
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-`; diff --git a/dashboards-reports/public/components/report_definitions/report_trigger/__tests__/report_trigger.test.tsx b/dashboards-reports/public/components/report_definitions/report_trigger/__tests__/report_trigger.test.tsx deleted file mode 100644 index b8c2f5d3..00000000 --- a/dashboards-reports/public/components/report_definitions/report_trigger/__tests__/report_trigger.test.tsx +++ /dev/null @@ -1,380 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; -import { - render, - waitFor, - waitForElement, - waitForElementToBeRemoved, -} from '@testing-library/react'; -import { ReportTrigger } from '../report_trigger'; -import 'babel-polyfill'; -import 'regenerator-runtime'; -import httpClientMock from '../../../../../test/httpMockClient'; -import { act } from 'react-dom/test-utils'; -import moment from 'moment-timezone'; - -const names = jest.fn(); - -const emptyRequest = { - report_params: { - report_name: '', - report_source: '', - description: '', - core_params: { - base_url: '', - report_format: '', - time_duration: '', - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: '', - trigger_params: {}, - }, - time_created: 0, - last_updated: 0, - status: '', -}; - -describe(' panel', () => { - beforeEach(() => { - jest.clearAllMocks(); - }); - test('render create component', () => { - let createReportDefinitionRequest = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: {}, - }, - }; - - let timeRange = { - timeFrom: new Date(), - timeTo: new Date(), - }; - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - }); - - // edit test - test('render edit recurring 5 hours schedule component', async () => { - const promise = Promise.resolve(); - let report_definition = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - schedule: { - interval: { - period: 5, - unit: 'HOURS', - timezone: 'PST8PDT', - }, - }, - enabled_time: 1114939203, - enabled: true, - }, - }, - }; - - let timeRange = { - timeFrom: new Date(), - timeTo: new Date(), - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('render edit recurring daily schedule component', async () => { - const promise = Promise.resolve(); - let editReportDefinitionRequest = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - schedule: { - interval: { - period: 1, - unit: 'DAYS', - start_time: 1114939203, - }, - }, - enabled_time: 1114939203, - enabled: true, - }, - }, - }; - - let timeRange = { - timeFrom: new Date(), - timeTo: new Date(), - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition: editReportDefinitionRequest, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('render edit Cron schedule component', async () => { - const promise = Promise.resolve(); - let cronReportDefinitionRequest = { - report_params: { - report_name: 'edit cron schedule component', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Cron based', - schedule: { - cron: { - expression: '30 1 * * *', - timezone: 'PDT', - }, - }, - enabled_time: 1234567890, - enabled: true, - }, - }, - }; - - let timeRange = { - timeFrom: new Date(), - timeTo: new Date(), - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition: cronReportDefinitionRequest, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('render edit recurring 10 minutes schedule component', async () => { - const promise = Promise.resolve(); - let editReportDefinitionRequest = { - report_params: { - report_name: 'test create report definition trigger', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - schedule_type: 'Recurring', - schedule: { - interval: { - period: 10, - unit: 'MINUTES', - start_time: 1114939203, - }, - }, - enabled_time: 1114939203, - enabled: true, - }, - }, - }; - - let timeRange = { - timeFrom: new Date(), - timeTo: new Date(), - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition: editReportDefinitionRequest, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); - - test('Render edit on-demand component', async () => { - const promise = Promise.resolve(); - let editReportDefinitionRequest = { - report_params: { - report_name: 'edit cron schedule component', - report_source: 'Dashboard', - description: '', - core_params: { - base_url: '', - report_format: '', - header: '', - footer: '', - time_duration: '', - }, - }, - delivery: { - delivery_type: '', - delivery_params: {}, - }, - trigger: { - trigger_type: 'On demand', - }, - }; - - let timeRange = { - timeFrom: new Date(), - timeTo: new Date(), - }; - - httpClientMock.get = jest.fn().mockResolvedValue({ - report_definition: editReportDefinitionRequest, - }); - - const { container } = render( - - ); - - expect(container.firstChild).toMatchSnapshot(); - await act(() => promise); - }); -}); diff --git a/dashboards-reports/public/components/report_definitions/report_trigger/index.ts b/dashboards-reports/public/components/report_definitions/report_trigger/index.ts deleted file mode 100644 index 99c31037..00000000 --- a/dashboards-reports/public/components/report_definitions/report_trigger/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export { ReportTrigger } from './report_trigger'; diff --git a/dashboards-reports/public/components/report_definitions/report_trigger/report_trigger.tsx b/dashboards-reports/public/components/report_definitions/report_trigger/report_trigger.tsx deleted file mode 100644 index 1ab67ebc..00000000 --- a/dashboards-reports/public/components/report_definitions/report_trigger/report_trigger.tsx +++ /dev/null @@ -1,720 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React, { useEffect, useState } from 'react'; -import { i18n } from '@osd/i18n'; -import { - EuiFormRow, - EuiRadioGroup, - EuiDatePicker, - EuiSelect, - EuiSpacer, - EuiFlexGroup, - EuiFlexItem, - EuiText, - EuiFieldText, - EuiCheckboxGroup, - EuiTextArea, - EuiLink, - EuiFieldNumber, -} from '@elastic/eui'; -import moment, { Moment } from 'moment'; -import { reportDefinitionParams } from '../create/create_report_definition'; -import { - SCHEDULE_RECURRING_OPTIONS, - INTERVAL_TIME_PERIODS, - WEEKLY_CHECKBOX_OPTIONS, - MONTHLY_ON_THE_OPTIONS, - TRIGGER_TYPE_OPTIONS, - SCHEDULE_TYPE_OPTIONS, - TIMEZONE_OPTIONS, -} from './report_trigger_constants'; -import { TimezoneSelect } from './timezone'; - -type ReportTriggerProps = { - edit: boolean; - editDefinitionId: string; - reportDefinitionRequest: reportDefinitionParams; - httpClientProps: any; - showTriggerIntervalNaNError: boolean; - showCronError: boolean; -}; - -export function ReportTrigger(props: ReportTriggerProps) { - const { - edit, - editDefinitionId, - reportDefinitionRequest, - httpClientProps, - showTriggerIntervalNaNError, - showCronError, - } = props; - - const [reportTriggerType, setReportTriggerType] = useState( - TRIGGER_TYPE_OPTIONS[0].id - ); - - const [scheduleType, setScheduleType] = useState( - SCHEDULE_TYPE_OPTIONS[0].label - ); - //TODO: should read local timezone and display - const [scheduleRecurringFrequency, setScheduleRecurringFrequency] = useState( - 'daily' - ); - const [recurring, setRecurringTime] = useState(moment()); - - const [weeklyCheckbox, setWeeklyCheckbox] = useState({ - ['monCheckbox']: true, - }); - const [monthlySelect, setMonthlySelect] = useState( - MONTHLY_ON_THE_OPTIONS[0].value - ); - - const handleReportTriggerType = (e: string) => { - setReportTriggerType(e); - reportDefinitionRequest.trigger.trigger_type = e; - if (e === 'On demand') { - delete reportDefinitionRequest.trigger.trigger_params; - } - }; - - const handleScheduleType = (e: React.SetStateAction) => { - setScheduleType(e); - if (e === SCHEDULE_TYPE_OPTIONS[1].label) { - delete reportDefinitionRequest.trigger.trigger_params.schedule.interval; - } else if (e === SCHEDULE_TYPE_OPTIONS[0].label) { - delete reportDefinitionRequest.trigger.trigger_params.schedule.cron; - } - }; - - const handleScheduleRecurringFrequency = (e: { - target: { value: React.SetStateAction }; - }) => { - setScheduleRecurringFrequency(e.target.value); - reportDefinitionRequest.trigger.trigger_params.schedule_type = - e.target.value; - }; - - const handleRecurringTime = (e: React.SetStateAction) => { - setRecurringTime(e); - }; - - const handleWeeklyCheckbox = (e) => { - const newCheckboxIdToSelectedMap = { - ...weeklyCheckbox, - ...{ - [e]: !weeklyCheckbox[e], - }, - }; - setWeeklyCheckbox(newCheckboxIdToSelectedMap); - }; - - const handleMonthlySelect = (e: { - target: { value: React.SetStateAction }; - }) => { - setMonthlySelect(e.target.value); - }; - - const RequestTime = () => { - useEffect(() => { - let recurringDaily = { - interval: { - period: 1, - unit: 'DAYS', - start_time: recurring.valueOf(), - }, - }; - reportDefinitionRequest.trigger.trigger_params = { - ...reportDefinitionRequest.trigger.trigger_params, - enabled_time: recurring.valueOf(), - schedule: recurringDaily, - }; - }, []); - - return ( -
- - - - -
- ); - }; - - const RecurringDaily = () => { - const [recurringDailyTime, setRecurringDailyTime] = useState(moment()); - - const handleRecurringDailyTime = (e) => { - setRecurringDailyTime(e); - reportDefinitionRequest.trigger.trigger_params.schedule.interval.start_time = e.valueOf(); - }; - - const setDailyParams = () => { - let recurringDaily = { - interval: { - period: 1, - unit: 'DAYS', - start_time: recurringDailyTime.valueOf(), - }, - }; - reportDefinitionRequest.trigger.trigger_params = { - ...reportDefinitionRequest.trigger.trigger_params, - enabled_time: recurringDailyTime.valueOf(), - schedule: recurringDaily, - }; - }; - - const isDailySchedule = (response) => { - return ( - response.report_definition.trigger.trigger_params.schedule_type === - SCHEDULE_TYPE_OPTIONS[0].id && - response.report_definition.trigger.trigger_params.schedule.interval - .period === 1 && - response.report_definition.trigger.trigger_params.schedule.interval === - 'DAYS' - ); - }; - - useEffect(() => { - let unmounted = false; - if (edit) { - httpClientProps - .get(`../api/reporting/reportDefinitions/${editDefinitionId}`) - .then(async (response) => { - // if switching from on demand to schedule - if ( - response.report_definition.trigger.trigger_type === 'On demand' - ) { - setDailyParams(); - } else if (isDailySchedule(response)) { - const date = moment( - response.report_definition.trigger.trigger_params.schedule - .interval.start_time - ); - if (!unmounted) { - setRecurringDailyTime(date); - } - } - // if switching from on-demand to schedule - else if ( - reportDefinitionRequest.trigger.trigger_params.schedule_type === - SCHEDULE_TYPE_OPTIONS[0].id - ) { - setDailyParams(); - } - }); - } else { - setDailyParams(); - } - return () => { - unmounted = true; - }; - }, []); - - return ( -
- - - - -
- ); - }; - - const RecurringInterval = () => { - const [intervalText, setIntervalText] = useState(''); - const [intervalTimePeriod, setIntervalTimePeriod] = useState( - INTERVAL_TIME_PERIODS[0].value - ); - const [recurringIntervalTime, setRecurringIntervalTime] = useState( - moment() - ); - - const handleRecurringIntervalTime = (e) => { - setRecurringIntervalTime(e); - reportDefinitionRequest.trigger.trigger_params.schedule.interval.start_time = e.valueOf(); - }; - - const handleIntervalText = (e: { - target: { value: React.SetStateAction }; - }) => { - setIntervalText(e.target.value); - }; - - const handleIntervalTimePeriod = (e: { - target: { value: React.SetStateAction }; - }) => { - setIntervalTimePeriod(e.target.value); - }; - - useEffect(() => { - let interval = { - interval: { - period: parseInt(intervalText, 10), - unit: intervalTimePeriod, - start_time: recurringIntervalTime.valueOf(), - }, - }; - reportDefinitionRequest.trigger.trigger_params = { - ...reportDefinitionRequest.trigger.trigger_params, - enabled_time: recurringIntervalTime.valueOf(), - schedule: interval, - }; - }, [intervalTimePeriod, intervalText]); - - // second useEffect() only to be triggered before render when on Edit - useEffect(() => { - let unmounted = false; - if (edit) { - httpClientProps - .get(`../api/reporting/reportDefinitions/${editDefinitionId}`) - .then(async (response) => { - if ( - response.report_definition.trigger.trigger_params - .schedule_type === SCHEDULE_TYPE_OPTIONS[0].id - ) { - const date = moment( - response.report_definition.trigger.trigger_params.schedule - .interval.start_time - ); - if (!unmounted) { - setRecurringIntervalTime(date); - setIntervalText( - response.report_definition.trigger.trigger_params.schedule.interval.period.toString() - ); - setIntervalTimePeriod( - response.report_definition.trigger.trigger_params.schedule - .interval.unit - ); - } - } - }); - } - return () => { - unmounted = true; - }; - }, []); - - return ( -
- - - - - - - - - - - - - - - -
- ); - }; - - const RecurringWeekly = () => { - return ( -
- - - - - -
- ); - }; - - const RecurringMonthly = () => { - const [monthlyDayNumber, setMonthlyDayNumber] = useState(''); - - const handleMonthlyDayNumber = (e: { - target: { value: React.SetStateAction }; - }) => { - setMonthlyDayNumber(e.target.value); - }; - - return ( -
- - - - - - - - - - - - -
- ); - }; - - const CronExpression = () => { - const [cronExpression, setCronExpression] = useState(''); - - const handleCronExpression = (e: { - target: { value: React.SetStateAction }; - }) => { - setCronExpression(e.target.value); - reportDefinitionRequest.trigger.trigger_params.schedule.cron.expression = - e.target.value; - }; - - const setCronParams = () => { - let cron = { - cron: { - expression: '', - timezone: TIMEZONE_OPTIONS[0].value, - }, - }; - reportDefinitionRequest.trigger.trigger_params = { - ...reportDefinitionRequest.trigger.trigger_params, - enabled_time: Date.now().valueOf(), - schedule: cron, - }; - }; - - useEffect(() => { - if (edit) { - httpClientProps - .get(`../api/reporting/reportDefinitions/${editDefinitionId}`) - .then(async (response) => { - // if switching from on demand to schedule - if ( - response.report_definition.trigger.trigger_type === 'On demand' - ) { - setCronParams(); - } else if ( - response.report_definition.trigger.trigger_params - .schedule_type === SCHEDULE_TYPE_OPTIONS[1].id - ) { - setCronExpression( - response.report_definition.trigger.trigger_params.schedule.cron - .expression - ); - } else { - setCronParams(); - } - }); - } else { - setCronParams(); - } - }, []); - - return ( -
- - - Cron help - - - } - > - - - -
- ); - }; - - const ScheduleTriggerRecurring = () => { - const display_daily = - scheduleRecurringFrequency === 'daily' ? : null; - - const display_interval = - scheduleRecurringFrequency === 'byInterval' ? ( - - ) : null; - - const display_weekly = - scheduleRecurringFrequency === 'weekly' ? : null; - - const display_monthly = - scheduleRecurringFrequency === 'monthly' ? : null; - - return ( -
- - - - - {display_daily} - {display_interval} - {display_weekly} - {display_monthly} -
- ); - }; - - const ScheduleTrigger = () => { - const display_recurring = - scheduleType === SCHEDULE_TYPE_OPTIONS[0].id ? ( - - ) : null; - - const display_cron = - scheduleType === SCHEDULE_TYPE_OPTIONS[1].id ? ( -
- - -
- ) : null; - - useEffect(() => { - // Set default trigger_type - SCHEDULE_TYPE_OPTIONS.map((item) => { - if (item.id === scheduleType) { - reportDefinitionRequest.trigger.trigger_params = { - ...reportDefinitionRequest.trigger.trigger_params, - schedule_type: item.id, - //TODO: need better handle - }; - if (!edit) { - reportDefinitionRequest.trigger.trigger_params.enabled = true; - } - if (!('enabled' in reportDefinitionRequest.trigger.trigger_params)) { - reportDefinitionRequest.trigger.trigger_params.enabled = true; - } - } - }); - }, [scheduleType]); - - return ( -
- - - - - {display_recurring} - {display_cron} -
- ); - }; - - const schedule = - reportTriggerType === 'Schedule' ? : null; - - const defaultEditTriggerType = (trigger_type) => { - let index = 0; - for (index; index < TRIGGER_TYPE_OPTIONS.length; ++index) { - if (TRIGGER_TYPE_OPTIONS[index].id === trigger_type) { - setReportTriggerType(TRIGGER_TYPE_OPTIONS[index].id); - } - } - }; - - const defaultEditRequestType = (trigger) => { - let index = 0; - for (index; index < SCHEDULE_TYPE_OPTIONS.length; ++index) { - if ( - SCHEDULE_TYPE_OPTIONS[index].id === trigger.trigger_params.schedule_type - ) { - setScheduleType(SCHEDULE_TYPE_OPTIONS[index].id); - } - } - }; - - const defaultEditScheduleFrequency = (trigger_params) => { - if (trigger_params.schedule_type === SCHEDULE_TYPE_OPTIONS[0].id) { - if ( - trigger_params.schedule.interval.unit === 'Days' && - trigger_params.schedule.interval.period === 1 - ) { - setScheduleRecurringFrequency('daily'); - } else { - setScheduleRecurringFrequency('byInterval'); - } - } - }; - - const defaultConfigurationEdit = (trigger) => { - defaultEditTriggerType(trigger.trigger_type); - if (trigger.trigger_type === 'Schedule') { - defaultEditScheduleFrequency(trigger.trigger_params); - defaultEditRequestType(trigger); - } else if (trigger.trigger_type == 'On demand') { - setReportTriggerType('On demand'); - reportDefinitionRequest.trigger.trigger_type = 'On demand'; - } - }; - - useEffect(() => { - if (edit) { - httpClientProps - .get(`../api/reporting/reportDefinitions/${editDefinitionId}`) - .then(async (response) => { - defaultConfigurationEdit(response.report_definition.trigger); - reportDefinitionRequest.trigger = response.report_definition.trigger; - }); - } - // Set default trigger_type for create new report definition - else { - TRIGGER_TYPE_OPTIONS.map((item) => { - if (item.id === reportTriggerType) { - reportDefinitionRequest.trigger.trigger_type = item.id; - } - }); - } - }, []); - - return ( -
- - - - - {schedule} -
- ); -} diff --git a/dashboards-reports/public/components/report_definitions/report_trigger/report_trigger_constants.tsx b/dashboards-reports/public/components/report_definitions/report_trigger/report_trigger_constants.tsx deleted file mode 100644 index 71905384..00000000 --- a/dashboards-reports/public/components/report_definitions/report_trigger/report_trigger_constants.tsx +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import moment from 'moment-timezone'; -import { i18n } from '@osd/i18n'; - -export const TRIGGER_TYPE_OPTIONS = [ - { - id: 'On demand', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.triggerTypeOptions.onDemand', - { defaultMessage: 'On demand' } - ), - }, - { - id: 'Schedule', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.triggerTypeOptions.schedule', - { defaultMessage: 'Schedule' } - ), - }, -]; - -export const SCHEDULE_TYPE_OPTIONS = [ - { - id: 'Recurring', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.scheduleTypeOptions.recurring', - { defaultMessage: 'Recurring' } - ), - }, - { - id: 'Cron based', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.scheduleTypeOptions.cronBased', - { defaultMessage: 'Cron based' } - ), - }, -]; - -export const SCHEDULE_RECURRING_OPTIONS = [ - { - value: 'daily', - text: i18n.translate( - 'opensearch.reports.reportTriggerConstants.scheduleRecurringOptions.daily', - { defaultMessage: 'Daily' } - ), - }, - { - value: 'byInterval', - text: i18n.translate( - 'opensearch.reports.reportTriggerConstants.scheduleRecurringOptions.byInterval', - { defaultMessage: 'By interval' } - ), - }, - // TODO: disable on UI. Add them back once we support - // { - // value: 'weekly', - // text: 'Weekly', - // }, - // { - // value: 'monthly', - // text: 'Monthly', - // }, -]; - -export const INTERVAL_TIME_PERIODS = [ - { - value: 'MINUTES', - text: i18n.translate( - 'opensearch.reports.reportTriggerConstants.intervalTimePeriods.minutes', - { defaultMessage: 'Minutes' } - ), - }, - { - value: 'HOURS', - text: i18n.translate( - 'opensearch.reports.reportTriggerConstants.intervalTimePeriods.hours', - { defaultMessage: 'Hours' } - ), - }, - { - value: 'DAYS', - text: i18n.translate( - 'opensearch.reports.reportTriggerConstants.intervalTimePeriods.days', - { defaultMessage: 'Days' } - ), - }, -]; - -export const WEEKLY_CHECKBOX_OPTIONS = [ - { - id: 'monCheckbox', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.mon', - { defaultMessage: 'Mon' } - ), - }, - { - id: 'tueCheckbox', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.tue', - { defaultMessage: 'Tue' } - ), - }, - { - id: 'wedCheckbox', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.wed', - { defaultMessage: 'Wed' } - ), - }, - { - id: 'thuCheckbox', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.thu', - { defaultMessage: 'Thu' } - ), - }, - { - id: 'friCheckbox', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.fri', - { defaultMessage: 'Fri' } - ), - }, - { - id: 'satCheckbox', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.sat', - { defaultMessage: 'Sat' } - ), - }, - { - id: 'sunCheckbox', - label: i18n.translate( - 'opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.sun', - { defaultMessage: 'Sun' } - ), - }, -]; - -export const MONTHLY_ON_THE_OPTIONS = [ - { - value: 'day', - text: i18n.translate( - 'opensearch.reports.reportTriggerConstants.monthlyOnTheOptions.day', - { defaultMessage: 'Day' } - ), - }, -]; - -export const TIMEZONE_OPTIONS = moment.tz - .names() - .map((tz) => ({ value: tz, text: tz })); diff --git a/dashboards-reports/public/components/report_definitions/report_trigger/timezone.tsx b/dashboards-reports/public/components/report_definitions/report_trigger/timezone.tsx deleted file mode 100644 index aee4ceca..00000000 --- a/dashboards-reports/public/components/report_definitions/report_trigger/timezone.tsx +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { EuiFormRow, EuiSelect } from '@elastic/eui'; -import React, { useState, useEffect } from 'react'; -import { i18n } from '@osd/i18n'; -import { TIMEZONE_OPTIONS } from './report_trigger_constants'; - -export function TimezoneSelect(props: { reportDefinitionRequest: any; httpClientProps: any; edit: any; editDefinitionId: any; }) { - const { - reportDefinitionRequest, - httpClientProps, - edit, - editDefinitionId, - } = props; - const [timezone, setTimezone] = useState(TIMEZONE_OPTIONS[0].value); - - const handleTimezone = (e: { target: { value: React.SetStateAction; }; }) => { - setTimezone(e.target.value); - if ( - reportDefinitionRequest.trigger.trigger_params.schedule_type === - 'Cron based' - ) { - reportDefinitionRequest.trigger.trigger_params.schedule.cron.timezone = - e.target.value; - } - }; - - useEffect(() => { - let unmounted = false; - if (edit) { - httpClientProps - .get(`../api/reporting/reportDefinitions/${editDefinitionId}`) - .then(async (response) => { - if ( - !unmounted && - reportDefinitionRequest.trigger.trigger_params.schedule_type === - 'Cron based' - ) { - setTimezone( - response.report_definition.trigger.trigger_params.schedule.cron - .timezone - ); - } - }); - } - return () => { - unmounted = true; - }; - }, []); - - return ( -
- - - -
- ); -} diff --git a/dashboards-reports/public/components/report_definitions/utils/index.ts b/dashboards-reports/public/components/report_definitions/utils/index.ts deleted file mode 100644 index f5e69b95..00000000 --- a/dashboards-reports/public/components/report_definitions/utils/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Showdown from 'showdown'; - -export const converter = new Showdown.Converter({ - tables: true, - simplifiedAutoLink: true, - strikethrough: true, - tasklists: true, - noHeaderId: true, -}); diff --git a/dashboards-reports/public/components/report_definitions/utils/utils.tsx b/dashboards-reports/public/components/report_definitions/utils/utils.tsx deleted file mode 100644 index cf10f061..00000000 --- a/dashboards-reports/public/components/report_definitions/utils/utils.tsx +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { isValidCron } from 'cron-validator'; -import { i18n } from '@osd/i18n'; -import moment from 'moment'; -import { includeDelivery } from '../delivery/delivery'; - -export const definitionInputValidation = async ( - metadata, - error, - setShowSettingsReportNameError, - setSettingsReportNameErrorMessage, - setShowSettingsReportSourceError, - setSettingsReportSourceErrorMessage, - setShowTriggerIntervalNaNError, - timeRange, - setShowTimeRangeError, - setShowCronError -) => { - // check report name - // allow a-z, A-Z, 0-9, (), [], ',' - and _ and spaces - let regexp = /^[\w\-\s\(\)\[\]\,\_\-+]+$/; - if (metadata.report_params.report_name.search(regexp) === -1) { - setShowSettingsReportNameError(true); - if (metadata.report_params.report_name === '') { - setSettingsReportNameErrorMessage('Name must not be empty.'); - } else { - setSettingsReportNameErrorMessage('Invalid characters in report name.'); - } - error = true; - } - - // if recurring by interval and input is not a number - if ( - metadata.trigger.trigger_type === 'Schedule' && - metadata.trigger.trigger_params.schedule_type === 'Recurring' - ) { - let interval = parseInt( - metadata.trigger.trigger_params.schedule.interval.period - ); - if (isNaN(interval)) { - setShowTriggerIntervalNaNError(true); - error = true; - } - } - - // if report source is blank - if (metadata.report_params.core_params.base_url === '') { - setShowSettingsReportSourceError(true); - setSettingsReportSourceErrorMessage( - i18n.translate('opensearch.reports.error.reportSourceMustNotBeEmpty', { - defaultMessage: 'Report source must not be empty.', - }) - ); - error = true; - } - - // if time range is invalid - const nowDate = new Date(moment.now()); - if (timeRange.timeFrom > timeRange.timeTo || timeRange.timeTo > nowDate) { - setShowTimeRangeError(true); - error = true; - } - - // if cron based and cron input is invalid - if ( - metadata.trigger.trigger_type === 'Schedule' && - metadata.trigger.trigger_params.schedule_type === 'Cron based' - ) { - if ( - !isValidCron(metadata.trigger.trigger_params.schedule.cron.expression) - ) { - setShowCronError(true); - error = true; - } - } - return error; -}; diff --git a/dashboards-reports/public/components/utils/settings_service.ts b/dashboards-reports/public/components/utils/settings_service.ts deleted file mode 100644 index 4a15e831..00000000 --- a/dashboards-reports/public/components/utils/settings_service.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { HttpStart, IUiSettingsClient } from '../../../../../src/core/public'; - -let uiSettings: IUiSettingsClient; -let http: HttpStart; - -export const uiSettingsService = { - init: (uiSettingsClient: IUiSettingsClient, httpClient: HttpStart) => { - uiSettings = uiSettingsClient; - http = httpClient; - }, - get: (key: string, defaultOverride?: any) => { - return uiSettings?.get(key, defaultOverride) || ''; - }, - getSearchParams: function () { - const rawTimeZone = this.get('dateFormat:tz'); - const timezone = - !rawTimeZone || rawTimeZone === 'Browser' - ? Intl.DateTimeFormat().resolvedOptions().timeZone - : rawTimeZone; - const dateFormat = this.get('dateFormat'); - const csvSeparator = this.get('csv:separator'); - const allowLeadingWildcards = this.get('query:allowLeadingWildcards'); - return { - timezone, - dateFormat, - csvSeparator, - allowLeadingWildcards, - }; - }, - getHttpClient: () => http, -}; diff --git a/dashboards-reports/public/components/utils/utils.tsx b/dashboards-reports/public/components/utils/utils.tsx deleted file mode 100644 index 2638c993..00000000 --- a/dashboards-reports/public/components/utils/utils.tsx +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import React from 'react'; - -export const permissionsMissingToast = (action: string) => { - return { - title: 'Error ' + action, - color: 'danger', - iconType: 'alert', - id: 'permissionsMissingErrorToast' + action.replace(' ', ''), - text: ( -

Insufficient permissions. Reach out to your OpenSearch Dashboards administrator.

- ), - }; -}; - -export const permissionsMissingActions = { - CHANGE_SCHEDULE_STATUS: 'changing schedule status.', - DELETE_REPORT_DEFINITION: 'deleting report definition.', - GENERATING_REPORT: 'generating report.', - LOADING_REPORTS_TABLE: 'loading reports table.', - LOADING_DEFINITIONS_TABLE: 'loading report definitions table.', - VIEWING_EDIT_PAGE: 'viewing edit page.', - UPDATING_DEFINITION: 'updating report definition', - CREATING_REPORT_DEFINITION: 'creating new report definition.', -}; - -export const timeRangeMatcher = /time:\(from:(.+?),to:(.+?)\)/; diff --git a/dashboards-reports/public/components/visual_report/assets/report_styles.ts b/dashboards-reports/public/components/visual_report/assets/report_styles.ts deleted file mode 100644 index a78ee8a8..00000000 --- a/dashboards-reports/public/components/visual_report/assets/report_styles.ts +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export const reportingStyle = ` -html, -body { - margin: 0; - padding: 0; -} - -iframe, embed, object { - display: none !important; -} - -/* nice padding + matches Kibana default UI colors you could also set this to inherit if - the wrapper gets inserted inside a kibana section. I might also remove the manual text color here as well, potentially */ -.reportWrapper { - padding: 8px; - background-color: #fafbfd; -} - -/* Notice that I'm using an ID of #reportingHeader, and #reportingFooter, instead of a classname (.reportingHeader, .reportingFooter). This is - in order to force specificity here higher in case any other styles would conflict */ -#reportingHeader, -#reportingFooter { - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - background-color: #fff; - border: 1px solid #d3dae6; - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), - 0 1px 5px -2px rgba(152, 162, 179, 0.3); - border-radius: 4px; - padding: 1em; - margin-bottom: 1em; -} - -#reportingFooter { - margin-top: 1em; -} - -#reportingHeader p, -#reportingFooter p { - max-width: 960px; -} - -/* Adjust the margin when the header is the first item */ -#reportingHeader h1:first-child, -#reportingFooter h1:first-child, -#reportingHeader h2:first-child, -#reportingFooter h2:first-child, -#reportingHeader h3:first-child, -#reportingFooter h3:first-child, -#reportingHeader h4:first-child, -#reportingFooter h4:first-child, -#reportingHeader h5:first-child, -#reportingFooter h5:first-child, -#reportingHeader h6:first-child, -#reportingFooter h6:first-child { - margin-top: 0.25em; -} - -/* nicer list styles */ -#reportingHeader ul, -#reportingFooter ul, -#reportingHeader ol, -#reportingFooter ol { - max-width: 70rem; - margin-bottom: 1em; -} - -#reportingHeader ul li, -#reportingFooter ul li, -#reportingHeader ol li, -#reportingFooter ol li { - margin-bottom: 0.25em; - margin-left: -0.5em; - padding-left: 0.25em; -} - -#reportingHeader ul, -#reportingFooter ul { - list-style-type: disc; -} - -/* here we explicitly set nested paragraphs inside lists to inherit their styles from the list, in case markdown does funky things */ -#reportingHeader ul p, -#reportingFooter ul p, -#reportingHeader ol p, -#reportingFooter ol p { - font-family: inherit; - font-size: inherit; - font-weight: inherit; - /* We only inherit vertical spacing, not horizontal */ - margin-top: inherit; - margin-bottom: inherit; -} - - [eCommerce] Revenue Dashboard - OpenSearch
-
-

-

Dashboard panel: [eCommerce] Markdown[eCommerce] Markdown

Sample eCommerce Data

-

This dashboard contains sample data for you to play with. You can view it, search it, and interact with the visualizations. For more information about OpenSearch Dashboards, check our docs.

-

Dashboard panel: [eCommerce] Controls[eCommerce] Controls

Dashboard panel: [eCommerce] Sold Products per Day[eCommerce] Sold Products per Day

Trxns / day
149

Dashboard panel: [eCommerce] Sales by Gender[eCommerce] Sales by Gender

FEMALE (52.89%)MALE (47.11%)

Dashboard panel: [eCommerce] Average Sales Price[eCommerce] Average Sales Price

$74.62per order
average spend

Dashboard panel: [eCommerce] Average Sold Quantity[eCommerce] Average Sold Quantity

2.124per order
average items

Dashboard panel: [eCommerce] Total Revenue[eCommerce] Total Revenue

$78,725.49

Dashboard panel: [eCommerce] Sales by Category[eCommerce] Sales by Category

Sum of total_quantity020406080100
2021-06-17 12:002021-06-18 12:002021-06-19 12:002021-06-20 12:002021-06-21 12:002021-06-22 12:002021-06-23 12:00order_date per 3 hours

Dashboard panel: [eCommerce] Promotion Tracking[eCommerce] Promotion Tracking

  • Revenue Trousers
    $71
  • Revenue Watches
    $239
  • Revenue Bags
    $1,055.781
  • Revenue Cocktail Dresses
    $483.969

Dashboard panel: [eCommerce] Sales Count Map[eCommerce] Sales Count Map

Dashboard panel: [eCommerce] Top Selling Products[eCommerce] Top Selling Products

Lace-up boots - blackAnkle boots - blackBoots - blackPrint T-shirt - blackJumper - blackLace-up boots - resin coffeeDress with Defined Waist

Dashboard panel: [eCommerce] Orders[eCommerce] Orders

-
-
-
- - -
1–50 of 1055
-
-
-
-
- - - - - -
Timecategoryskutaxful_total_pricetotal_quantity
- -Jun 23, 2021 @ 23:56:10.000
Women's Accessories, Women's Clothing
ZO0301903019, ZO0049800498
$43.98
2
- -Jun 23, 2021 @ 23:41:46.000
Men's Clothing
ZO0128701287, ZO0577005770
$49.98
2
- -Jun 23, 2021 @ 23:37:26.000
Men's Clothing
ZO0558005580, ZO0276502765
$18.98
2
- -Jun 23, 2021 @ 23:33:07.000
Women's Accessories, Women's Clothing
ZO0358803588, ZO0179601796
$91.98
2
- -Jun 23, 2021 @ 23:21:36.000
Men's Clothing
ZO0543605436, ZO0425604256
$89.98
2
- -Jun 23, 2021 @ 23:21:36.000
Men's Clothing
ZO0629306293, ZO0578405784
$37.98
2
- -Jun 23, 2021 @ 22:51:22.000
Men's Clothing
ZO0291602916, ZO0292302923
$221.98
2
- -Jun 23, 2021 @ 22:48:29.000
Women's Clothing, Women's Accessories
ZO0262902629, ZO0358703587
$83.98
2
- -Jun 23, 2021 @ 22:29:46.000
Men's Clothing
ZO0474604746, ZO0111701117
$36.98
2
- -Jun 23, 2021 @ 22:12:29.000
Men's Accessories, Men's Shoes
ZO0598005980, ZO0681706817
$75.98
2
- -Jun 23, 2021 @ 22:11:02.000
Women's Clothing, Women's Shoes
ZO0221402214, ZO0677006770
$103.98
2
- -Jun 23, 2021 @ 21:59:31.000
Men's Clothing, Men's Shoes
ZO0579905799, ZO0386403864
$55.98
2
- -Jun 23, 2021 @ 21:55:12.000
Men's Clothing
ZO0474204742, ZO0574005740
$31.98
2
- -Jun 23, 2021 @ 21:48:00.000
Men's Clothing, Men's Shoes
ZO0580905809, ZO0507105071
$41.98
2
- -Jun 23, 2021 @ 21:23:31.000
Women's Clothing
ZO0217002170, ZO0164201642
$27.98
2
- -Jun 23, 2021 @ 21:17:46.000
Women's Shoes, Women's Clothing
ZO0368003680, ZO0173001730
$63.98
2
- -Jun 23, 2021 @ 21:12:00.000
Men's Clothing
ZO0437404374, ZO0293102931
$24.98
2
- -Jun 23, 2021 @ 21:09:07.000
Women's Accessories, Women's Shoes
ZO0085300853, ZO0678506785
$95.98
2
- -Jun 23, 2021 @ 20:56:10.000
Women's Clothing, Women's Shoes
ZO0638706387, ZO0677206772
$92.98
2
- -Jun 23, 2021 @ 20:41:46.000
Women's Shoes, Women's Clothing
ZO0678406784, ZO0712707127
$99.98
2
- -Jun 23, 2021 @ 20:37:26.000
Women's Clothing
ZO0708107081, ZO0500905009
$42.98
2
- -Jun 23, 2021 @ 20:33:07.000
Women's Shoes
ZO0250002500, ZO0675406754
$159.98
2
- -Jun 23, 2021 @ 20:24:29.000
Women's Accessories
ZO0205602056, ZO0356903569
$46.98
2
- -Jun 23, 2021 @ 20:00:00.000
Men's Clothing
ZO0441304413, ZO0561205612
$22.98
2
- -Jun 23, 2021 @ 19:55:41.000
Men's Shoes, Men's Clothing
ZO0691306913, ZO0275502755
$139.98
2
- -Jun 23, 2021 @ 19:32:38.000
Men's Clothing
ZO0295102951, ZO0453304533, ZO0588305883, ZO0411304113
$82.96
4
- -Jun 23, 2021 @ 19:19:41.000
Men's Clothing, Men's Accessories
ZO0296402964, ZO0316203162
$42.98
2
- -Jun 23, 2021 @ 19:18:14.000
Men's Clothing, Men's Shoes
ZO0588005880, ZO0571805718, ZO0403504035, ZO0457504575
$108.96
4
- -Jun 23, 2021 @ 19:15:22.000
Women's Clothing
ZO0051800518, ZO0333303333
$92.98
2
- -Jun 23, 2021 @ 19:06:43.000
Men's Clothing, Men's Shoes
ZO0431904319, ZO0683606836
$149.98
2
- -Jun 23, 2021 @ 19:05:17.000
Women's Clothing, Women's Accessories
ZO0181701817, ZO0095300953
$45.98
2
- -Jun 23, 2021 @ 18:58:05.000
Men's Clothing
ZO0620606206, ZO0454204542
$70.98
2
- -Jun 23, 2021 @ 18:40:48.000
Women's Shoes, Women's Accessories
ZO0670906709, ZO0211302113
$128.98
2
- -Jun 23, 2021 @ 18:30:43.000
Women's Clothing
ZO0263002630, ZO0497904979
$93.98
2
- -Jun 23, 2021 @ 18:27:50.000
Men's Clothing, Men's Shoes
ZO0300603006, ZO0123501235, ZO0399803998, ZO0624206242
$160.96
4
- -Jun 23, 2021 @ 18:13:26.000
Women's Accessories, Women's Shoes
ZO0696806968, ZO0020700207
$66.98
2
- -Jun 23, 2021 @ 18:03:22.000
Women's Clothing, Women's Accessories
ZO0271302713, ZO0703207032
$74.98
2
- -Jun 23, 2021 @ 18:00:29.000
Men's Shoes, Men's Accessories
ZO0403504035, ZO0608606086
$91.98
2
- -Jun 23, 2021 @ 17:46:05.000
Men's Shoes, Men's Clothing
ZO0521405214, ZO0585905859
$64.98
2
- -Jun 23, 2021 @ 17:31:41.000
Women's Clothing
ZO0171101711, ZO0048400484
$74.98
2
- -Jun 23, 2021 @ 17:28:48.000
Women's Accessories
ZO0209302093, ZO0087400874
$47.98
2
- -Jun 23, 2021 @ 17:27:22.000
Women's Accessories
ZO0096100961, ZO0091000910
$53.98
2
- -Jun 23, 2021 @ 17:04:19.000
Men's Clothing
ZO0284802848, ZO0581605816
$49.98
2
- -Jun 23, 2021 @ 17:02:53.000
Men's Shoes
ZO0401004010, ZO0257802578
$119.98
2
- -Jun 23, 2021 @ 16:51:22.000
Men's Shoes, Men's Accessories
ZO0520705207, ZO0397603976, ZO0395003950, ZO0702307023
$207.96
4
- -Jun 23, 2021 @ 16:49:55.000
Women's Shoes, Women's Clothing
ZO0364403644, ZO0150401504
$116.98
2
- -Jun 23, 2021 @ 16:31:12.000
Men's Clothing, Women's Accessories
ZO0554505545, ZO0703407034
$96.98
2
- -Jun 23, 2021 @ 16:25:26.000
Women's Clothing
ZO0263002630
$51.99
1
- -Jun 23, 2021 @ 16:02:24.000
Women's Shoes
ZO0365203652, ZO0383303833
$126.98
2
- -Jun 23, 2021 @ 16:00:58.000
Women's Clothing
ZO0179701797, ZO0496004960
$42.98
2
-
- - -
- - - -
- -
- -
-
\ No newline at end of file diff --git a/dashboards-reports/server/routes/utils/__tests__/metricHelper.test.ts b/dashboards-reports/server/routes/utils/__tests__/metricHelper.test.ts deleted file mode 100644 index 3953a724..00000000 --- a/dashboards-reports/server/routes/utils/__tests__/metricHelper.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { checkErrorType } from '../helpers'; - -describe('Test collecting metrics', () => { - // TODO: need more tests - - test('check error type', () => { - const badRequestError = { - statusCode: 400, - }; - const serverError = { - statusCode: 500, - }; - const unknownError = { - statusCode: undefined, - }; - const userErrorType = checkErrorType(badRequestError); - const sysErrorType = checkErrorType(serverError); - const unknownErrorType = checkErrorType(unknownError); - expect(userErrorType).toEqual('user_error'); - expect(sysErrorType).toEqual('system_error'); - expect(unknownErrorType).toEqual('system_error'); - }); -}); diff --git a/dashboards-reports/server/routes/utils/__tests__/savedSearchReportHelper.test.ts b/dashboards-reports/server/routes/utils/__tests__/savedSearchReportHelper.test.ts deleted file mode 100644 index b1dd44c1..00000000 --- a/dashboards-reports/server/routes/utils/__tests__/savedSearchReportHelper.test.ts +++ /dev/null @@ -1,666 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import 'regenerator-runtime/runtime'; -import { createSavedSearchReport } from '../savedSearchReportHelper'; -import { reportSchema } from '../../../model'; -import { mockLogger } from '../../../../test/__mocks__/loggerMock'; -import _ from 'lodash'; - -/** - * The mock and sample input for saved search export function. - */ -const input = { - query_url: '/app/discover#/view/7adfa750-4c81-11e8-b3d7-01146121b73d', - time_from: 1343576635300, - time_to: 1596037435301, - report_definition: { - report_params: { - report_name: 'test report table order', - report_source: 'Saved search', - description: 'Hi this is your saved search on demand', - core_params: { - base_url: '/app/discover#/view/7adfa750-4c81-11e8-b3d7-01146121b73d', - saved_search_id: 'ddd8f430-f2ef-11ea-8c86-81a0b21b4b67', - report_format: 'csv', - time_duration: 'PT5M', - limit: 10000, - excel: true, - origin: 'http://localhost:5601', - }, - }, - delivery: { - configIds: [], - title: 'title', - textDescription: 'text description', - htmlDescription: 'html description', - }, - trigger: { - trigger_type: 'On demand', - }, - }, -}; - -const mockDateFormat = 'MM/DD/YYYY h:mm:ss.SSS a'; - -/** - * Max result window size in OpenSearch index settings. - */ -const maxResultSize = 5; - -describe('test create saved search report', () => { - test('create report with valid input', async () => { - // Check if the assumption of input is up-to-date - reportSchema.validate(input); - }, 20000); - - test('create report with expected file name', async () => { - const hits: Array<{ _source: any }> = []; - const client = mockOpenSearchClient(hits); - const { timeCreated, fileName } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - expect(fileName).toContain(`test report table order_`); - }, 20000); - - test('create report with expected file name extension', async () => { - const csvReport = await createSavedSearchReport( - input, - mockOpenSearchClient([]), - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - expect(csvReport.fileName).toContain('.csv'); - - input.report_definition.report_params.core_params.report_format = 'xlsx'; - const xlsxReport = await createSavedSearchReport( - input, - mockOpenSearchClient([]), - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - expect(xlsxReport.fileName).toContain('.xlsx'); - }, 20000); - - test('create report for empty data set', async () => { - const hits: Array<{ _source: any }> = []; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - expect(dataUrl).toEqual(''); - }, 20000); - - test('create report for small data set by single search', async () => { - const hits = [ - hit({ category: 'c1', customer_gender: 'Male' }), - hit({ category: 'c2', customer_gender: 'Male' }), - hit({ category: 'c3', customer_gender: 'Male' }), - hit({ category: 'c4', customer_gender: 'Male' }), - hit({ category: 'c5', customer_gender: 'Male' }), - ]; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category,customer_gender\n' + - 'c1,Male\n' + - 'c2,Male\n' + - 'c3,Male\n' + - 'c4,Male\n' + - 'c5,Male' - ); - }, 20000); - - test('create report for large data set by scroll', async () => { - const hits = [ - hit({ category: 'c1', customer_gender: 'Male' }), - hit({ category: 'c2', customer_gender: 'Male' }), - hit({ category: 'c3', customer_gender: 'Male' }), - hit({ category: 'c4', customer_gender: 'Male' }), - hit({ category: 'c5', customer_gender: 'Male' }), - hit({ category: 'c6', customer_gender: 'Female' }), - hit({ category: 'c7', customer_gender: 'Female' }), - hit({ category: 'c8', customer_gender: 'Female' }), - hit({ category: 'c9', customer_gender: 'Female' }), - hit({ category: 'c10', customer_gender: 'Female' }), - hit({ category: 'c11', customer_gender: 'Male' }), - ]; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category,customer_gender\n' + - 'c1,Male\n' + - 'c2,Male\n' + - 'c3,Male\n' + - 'c4,Male\n' + - 'c5,Male\n' + - 'c6,Female\n' + - 'c7,Female\n' + - 'c8,Female\n' + - 'c9,Female\n' + - 'c10,Female\n' + - 'c11,Male' - ); - }, 20000); - - test('create report with limit smaller than max result size', async () => { - // Assign a smaller limit than default to test - input.report_definition.report_params.core_params.limit = 1; - - const hits = [ - hit({ category: 'c1', customer_gender: 'Male' }), - hit({ category: 'c2', customer_gender: 'Male' }), - hit({ category: 'c3', customer_gender: 'Male' }), - hit({ category: 'c4', customer_gender: 'Male' }), - hit({ category: 'c5', customer_gender: 'Male' }), - ]; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual('category,customer_gender\n' + 'c1,Male'); - }, 20000); - - test('create report with limit greater than max result size', async () => { - // Assign a limit just a little greater than max result size (5) - input.report_definition.report_params.core_params.limit = 6; - - const hits = [ - hit({ category: 'c1', customer_gender: 'Male' }), - hit({ category: 'c2', customer_gender: 'Male' }), - hit({ category: 'c3', customer_gender: 'Male' }), - hit({ category: 'c4', customer_gender: 'Male' }), - hit({ category: 'c5', customer_gender: 'Male' }), - hit({ category: 'c6', customer_gender: 'Female' }), - hit({ category: 'c7', customer_gender: 'Female' }), - hit({ category: 'c8', customer_gender: 'Female' }), - hit({ category: 'c9', customer_gender: 'Female' }), - hit({ category: 'c10', customer_gender: 'Female' }), - ]; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category,customer_gender\n' + - 'c1,Male\n' + - 'c2,Male\n' + - 'c3,Male\n' + - 'c4,Male\n' + - 'c5,Male\n' + - 'c6,Female' - ); - }, 20000); - - test('create report with limit greater than total result size', async () => { - // Assign a limit even greater than the result size - input.report_definition.report_params.core_params.limit = 10; - - const hits = [ - hit({ category: 'c1', customer_gender: 'Male' }), - hit({ category: 'c2', customer_gender: 'Male' }), - hit({ category: 'c3', customer_gender: 'Male' }), - hit({ category: 'c4', customer_gender: 'Male' }), - hit({ category: 'c5', customer_gender: 'Male' }), - hit({ category: 'c6', customer_gender: 'Female' }), - ]; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category,customer_gender\n' + - 'c1,Male\n' + - 'c2,Male\n' + - 'c3,Male\n' + - 'c4,Male\n' + - 'c5,Male\n' + - 'c6,Female' - ); - }, 20000); - - test('create report for data set with comma', async () => { - const hits = [ - hit({ category: ',c1', customer_gender: 'Ma,le' }), - hit({ category: 'c2,', customer_gender: 'M,ale' }), - hit({ category: ',,c3', customer_gender: 'Male,,,' }), - ]; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category,customer_gender\n' + - '",c1","Ma,le"\n' + - '"c2,","M,ale"\n' + - '",,c3","Male,,,"' - ); - }, 20000); - - test('create report for data set with comma and custom separator', async () => { - const hits = [ - hit({ category: ',c1', customer_gender: 'Ma,le' }), - hit({ category: 'c2,', customer_gender: 'M,ale' }), - hit({ category: ',,c3', customer_gender: 'Male,,,' }), - ]; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - '|', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category|customer_gender\n' + - ',c1|Ma,le\n' + - 'c2,|M,ale\n' + - ',,c3|Male,,,' - ); - }, 20000); - - test('create report for data set with nested fields', async () => { - const hits = [ - hit({ - 'geoip.country_iso_code': 'GB', - 'geoip.location': { lon: -0.1, lat: 51.5 }, - }), - hit({ - 'geoip.country_iso_code': 'US', - 'geoip.city_name': 'New York', - 'geoip.location': { lon: -74, lat: 40.8 }, - }), - ]; - const client = mockOpenSearchClient( - hits, - '"geoip.country_iso_code", "geoip.city_name", "geoip.location"' - ); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'geoip.country_iso_code,geoip.location.lon,geoip.location.lat,geoip.city_name\n' + - 'GB,-0.1,51.5, \n' + - 'US,-74,40.8,New York' - ); - }, 20000); - - test('create report by sanitizing data set for Excel', async () => { - const hits = [ - hit({ category: 'c1', customer_gender: '=Male' }), - hit({ category: 'c2', customer_gender: 'Male=' }), - hit({ category: 'c3', customer_gender: '+Ma,le' }), - hit({ category: ',-c4', customer_gender: 'Male' }), - hit({ category: ',,,@c5', customer_gender: 'Male' }), - ]; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category,customer_gender\n' + - `c1,'=Male\n` + - `c2,Male=\n` + - `c3,"'+Ma,le"\n` + - `",-c4",Male\n` + - `",,,@c5",Male` - ); - }, 20000); - - test('create report by not sanitizing data set for Excel', async () => { - // Enable Excel escape option - input.report_definition.report_params.core_params.excel = false; - - const hits = [ - hit({ category: 'c1', customer_gender: '=Male' }), - hit({ category: 'c2', customer_gender: 'Male=' }), - hit({ category: 'c3', customer_gender: '+Ma,le' }), - hit({ category: ',-c4', customer_gender: 'Male' }), - hit({ category: ',,,@c5', customer_gender: 'Male' }), - ]; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category,customer_gender\n' + - 'c1,=Male\n' + - 'c2,Male=\n' + - 'c3,"+Ma,le"\n' + - '",-c4",Male\n' + - '",,,@c5",Male' - ); - }, 20000); -}); - -test('create report for data set contains null field value', async () => { - const hits = [ - hit({ category: 'c1', customer_gender: 'Ma' }), - hit({ category: 'c2', customer_gender: 'le' }), - hit({ category: 'c3', customer_gender: null }), - ]; - const client = mockOpenSearchClient(hits); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category,customer_gender\n' + 'c1,Ma\n' + 'c2,le\n' + 'c3, ' - ); -}, 20000); - -test('create report for data set with metadata fields', async () => { - const metadataFields = { _index: 'nameofindex', _id: 'someid' }; - let hits = [ - hit({ category: 'c1', customer_gender: 'Male' }), - hit({ category: 'c2', customer_gender: 'Male' }), - hit({ category: 'c3', customer_gender: 'Male' }), - hit({ category: 'c4', customer_gender: 'Male' }), - hit({ category: 'c5', customer_gender: 'Male' }), - ]; - hits.forEach((i) => { - _.merge(i, metadataFields); - }); - - const client = mockOpenSearchClient( - hits, - '"category", "customer_gender","_index","_id"' - ); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category,customer_gender,_index,_id\n' + - 'c1,Male,nameofindex,someid\n' + - 'c2,Male,nameofindex,someid\n' + - 'c3,Male,nameofindex,someid\n' + - 'c4,Male,nameofindex,someid\n' + - 'c5,Male,nameofindex,someid' - ); -}, 20000); - -test('create report with empty/one/multiple(list) date values', async () => { - const hits = [ - hit( - { category: 'c1', customer_gender: 'Ma', order_date: [] }, - { order_date: [] } - ), - hit( - { - category: 'c2', - customer_gender: 'le', - order_date: ['2021-12-16T14:04:55'], - }, - { order_date: ['2021-12-16T14:04:55'] } - ), - hit( - { - category: 'c3', - customer_gender: 'he', - order_date: ['2021-12-17T14:04:55', '2021-12-18T14:04:55'], - }, - { order_date: ['2021-12-17T14:04:55', '2021-12-18T14:04:55'] } - ), - hit( - { - category: 'c4', - customer_gender: 'te', - order_date: '2021-12-19T14:04:55', - }, - { order_date: ['2021-12-19T14:04:55'] } - ), - ]; - const client = mockOpenSearchClient( - hits, - '"category", "customer_gender", "order_date"' - ); - const { dataUrl } = await createSavedSearchReport( - input, - client, - mockDateFormat, - ',', - true, - undefined, - mockLogger - ); - - expect(dataUrl).toEqual( - 'category,customer_gender,order_date\n' + - 'c1,Ma,[]\n' + - 'c2,le,"[""12/16/2021 2:04:55.000 pm""]"\n' + - 'c3,he,"[""12/17/2021 2:04:55.000 pm"",""12/18/2021 2:04:55.000 pm""]"\n' + - 'c4,te,12/19/2021 2:04:55.000 pm' - ); -}, 20000); - -/** - * Mock Elasticsearch client and return different mock objects based on endpoint and parameters. - */ -function mockOpenSearchClient( - mockHits: Array<{ _source: any }>, - columns = '"category", "customer_gender"' -) { - let call = 0; - const client = jest.fn(); - client.callAsInternalUser = jest - .fn() - .mockImplementation((endpoint: string, params: any) => { - switch (endpoint) { - case 'get': - return { - _source: params.id.startsWith('index-pattern:') - ? mockIndexPattern() - : mockSavedSearch(columns), - }; - case 'indices.getSettings': - return mockIndexSettings(); - case 'count': - return { - count: mockHits.length, - }; - case 'search': - return { - hits: { - hits: mockHits.slice(0, params.size), - }, - }; - case 'scroll': - call++; - return { - hits: { - hits: mockHits.slice( - maxResultSize * call, - maxResultSize * (call + 1) - ), - }, - }; - case 'clearScroll': - return null; - default: - fail('Fail due to unexpected function call on client', endpoint); - } - }); - return client; -} - -/** - * Mock a saved search for opensearch_dashboards_sample_data_ecommerce with 2 default selected fields: category and customer_gender. - */ -function mockSavedSearch(columns = '"category", "customer_gender"') { - return JSON.parse(` - { - "type": "search", - "id": "ddd8f430-f2ef-11ea-8c86-81a0b21b4b67", - "search": { - "title": "Show category and gender", - "description": "", - "hits": 0, - "columns": [ ${columns} ], - "sort": [], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\\"highlightAll\\":true,\\"version\\":true,\\"query\\":{\\"query\\":\\"\\",\\"language\\":\\"kuery\\"},\\"indexRefName\\":\\"kibanaSavedObjectMeta.searchSourceJSON.index\\",\\"filter\\":[]}" - } - }, - "references": [ - { - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern", - "id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f" - } - ] - } - `); -} - -/** - * Mock index pattern for opensearch_dashboards_sample_data_ecommerce. - */ -function mockIndexPattern() { - return JSON.parse(` - { - "index-pattern": { - "title": "opensearch_dashboards_sample_data_ecommerce", - "timeFieldName": "order_date", - "fields": "[{\\"name\\":\\"_id\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"_id\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"name\\":\\"_index\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"_index\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"name\\":\\"_score\\",\\"type\\":\\"number\\",\\"count\\":0,\\"scripted\\":false,\\"searchable\\":false,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"_source\\",\\"type\\":\\"_source\\",\\"opensearchTypes\\":[\\"_source\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":false,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"_type\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"_type\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"name\\":\\"category\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"text\\"],\\"count\\":2,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"category.keyword\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"category\\"}}},{\\"name\\":\\"currency\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"customer_birth_date\\",\\"type\\":\\"date\\",\\"opensearchTypes\\":[\\"date\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"customer_first_name\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"text\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"customer_first_name.keyword\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"customer_first_name\\"}}},{\\"name\\":\\"customer_full_name\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"text\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"customer_full_name.keyword\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"customer_full_name\\"}}},{\\"name\\":\\"customer_gender\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":2,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"customer_id\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"customer_last_name\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"text\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"customer_last_name.keyword\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"customer_last_name\\"}}},{\\"name\\":\\"customer_phone\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"day_of_week\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"day_of_week_i\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"integer\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"email\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"geoip.city_name\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"geoip.continent_name\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"geoip.country_iso_code\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"geoip.location\\",\\"type\\":\\"geo_point\\",\\"opensearchTypes\\":[\\"geo_point\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"geoip.region_name\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"manufacturer\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"text\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"manufacturer.keyword\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"manufacturer\\"}}},{\\"name\\":\\"order_date\\",\\"type\\":\\"date\\",\\"opensearchTypes\\":[\\"date\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"order_id\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products._id\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"text\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"products._id.keyword\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"products._id\\"}}},{\\"name\\":\\"products.base_price\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.base_unit_price\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.category\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"text\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"products.category.keyword\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"products.category\\"}}},{\\"name\\":\\"products.created_on\\",\\"type\\":\\"date\\",\\"opensearchTypes\\":[\\"date\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.discount_amount\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.discount_percentage\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.manufacturer\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"text\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"products.manufacturer.keyword\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"products.manufacturer\\"}}},{\\"name\\":\\"products.min_price\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.price\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.product_id\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"long\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.product_name\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"text\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"name\\":\\"products.product_name.keyword\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"products.product_name\\"}}},{\\"name\\":\\"products.quantity\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"integer\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.sku\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.tax_amount\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.taxful_price\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.taxless_price\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"products.unit_discount_amount\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"sku\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"taxful_total_price\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"taxless_total_price\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"half_float\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"total_quantity\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"integer\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"total_unique_products\\",\\"type\\":\\"number\\",\\"opensearchTypes\\":[\\"integer\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"type\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"name\\":\\"user\\",\\"type\\":\\"string\\",\\"opensearchTypes\\":[\\"keyword\\"],\\"count\\":0,\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true}]", - "fieldFormatMap": "{\\"taxful_total_price\\":{\\"id\\":\\"number\\",\\"params\\":{\\"parsedUrl\\":{\\"origin\\":\\"http://localhost:5601\\",\\"pathname\\":\\"/app/opensearch_dashboards\\",\\"basePath\\":\\"\\"},\\"pattern\\":\\"$0,0.[00]\\"}}}" - } - } - `); -} - -/** - * Mock index settings for opensearch_dashboards_sample_data_ecommerce. - */ -function mockIndexSettings() { - return JSON.parse(` - { - "opensearch_dashboards_sample_data_ecommerce": { - "settings": { - "index": { - "number_of_shards": "1", - "auto_expand_replicas": "0-1", - "provided_name": "opensearch_dashboards_sample_data_ecommerce", - "max_result_window": "${maxResultSize}", - "creation_date": "1594417718898", - "number_of_replicas": "0", - "uuid": "0KnfmEsaTYKg39ONcrA5Eg", - "version": { - "created": "7080099" - } - } - } - } - } - `); -} - -function hit(source_kv: any, fields_kv = {}) { - return { - _source: source_kv, - fields: fields_kv, - }; -} diff --git a/dashboards-reports/server/routes/utils/constants.ts b/dashboards-reports/server/routes/utils/constants.ts deleted file mode 100644 index b8b970d6..00000000 --- a/dashboards-reports/server/routes/utils/constants.ts +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { CountersType } from './types'; -import Showdown from 'showdown'; - -export enum FORMAT { - pdf = 'pdf', - png = 'png', - csv = 'csv', -} - -export enum REPORT_STATE { - created = 'Created', - error = 'Error', - pending = 'Pending', - shared = 'Shared', -} - -export enum REPORT_DEFINITION_STATUS { - active = 'Active', - disabled = 'Disabled', -} - -export enum DELIVERY_CHANNEL { - email = 'Email', - slack = 'Slack', - chime = 'Chime', - opensearchDashboards = 'OpenSearch Dashboards user', -} - -export enum SCHEDULE_TYPE { - recurring = 'Recurring', - cron = 'Cron based', -} - -export enum REPORT_TYPE { - savedSearch = 'Saved search', - dashboard = 'Dashboard', - visualization = 'Visualization', - notebook = 'Notebook', -} - -export enum DATA_REPORT_CONFIG { - excelDateFormat = 'MM/DD/YYYY h:mm:ss.SSS a', -} - -export enum TRIGGER_TYPE { - schedule = 'Schedule', - onDemand = 'On demand', -} - -export enum DELIVERY_TYPE { - opensearchDashboardsUser = 'OpenSearch Dashboards user', - channel = 'Channel', -} - -// https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-from-size.html -export const DEFAULT_MAX_SIZE = 10000; - -export const SECURITY_CONSTANTS = { - TENANT_LOCAL_STORAGE_KEY: 'opendistro::security::tenant::show_popup', -}; - -export const EXTRA_HEADERS = [ - 'cookie', - 'x-proxy-user', - 'x-proxy-roles', - 'x-forwarded-for', -]; - -const BLOCKED_KEYWORD = 'BLOCKED_KEYWORD'; -const ipv4Regex = /(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?):([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])/g -const ipv6Regex = /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/g; -const localhostRegex = /localhost:([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])/g; -const iframeRegex = /iframe/g; - -export const ALLOWED_HOSTS = /^(0|0.0.0.0|127.0.0.1|localhost|(.*\.)?(opensearch.org|aws.a2z.com))$/; - -export const replaceBlockedKeywords = (htmlString: string) => { - // replace : - htmlString = htmlString.replace(ipv4Regex, BLOCKED_KEYWORD); - // replace ipv6 addresses - htmlString = htmlString.replace(ipv6Regex, BLOCKED_KEYWORD); - // replace iframe keyword - htmlString = htmlString.replace(iframeRegex, BLOCKED_KEYWORD); - // replace localhost: - htmlString = htmlString.replace(localhostRegex, BLOCKED_KEYWORD); - return htmlString; -} - - -/** - * Metric constants - */ -export const WINDOW = 3600; -export const INTERVAL = 60; -export const CAPACITY = (WINDOW / INTERVAL) * 2; - -export const GLOBAL_BASIC_COUNTER: CountersType = { - report: { - create: { - total: 0, - }, - create_from_definition: { - total: 0, - }, - download: { - total: 0, - }, - list: { - total: 0, - }, - info: { - total: 0, - }, - }, - report_definition: { - create: { - total: 0, - }, - list: { - total: 0, - }, - info: { - total: 0, - }, - update: { - total: 0, - }, - delete: { - total: 0, - }, - }, - report_source: { - list: { - total: 0, - }, - }, - dashboard: { - pdf: { - download: { - total: 0, - }, - }, - png: { - download: { - total: 0, - }, - }, - }, - visualization: { - pdf: { - download: { - total: 0, - }, - }, - png: { - download: { - total: 0, - }, - }, - }, - notebook: { - pdf: { - download: { - count: 0, - }, - }, - png: { - download: { - count: 0, - }, - }, - }, - saved_search: { - csv: { - download: { - total: 0, - }, - }, - }, -}; - -export const DEFAULT_ROLLING_COUNTER: CountersType = { - report: { - create: { - count: 0, - system_error: 0, - user_error: 0, - }, - create_from_definition: { - count: 0, - system_error: 0, - user_error: 0, - }, - download: { - count: 0, - system_error: 0, - user_error: 0, - }, - list: { - count: 0, - system_error: 0, - user_error: 0, - }, - info: { - count: 0, - system_error: 0, - user_error: 0, - }, - }, - report_definition: { - create: { - count: 0, - system_error: 0, - user_error: 0, - }, - list: { - count: 0, - system_error: 0, - user_error: 0, - }, - info: { - count: 0, - system_error: 0, - user_error: 0, - }, - update: { - count: 0, - system_error: 0, - user_error: 0, - }, - delete: { - count: 0, - system_error: 0, - user_error: 0, - }, - }, - report_source: { - list: { - count: 0, - system_error: 0, - user_error: 0, - }, - }, - dashboard: { - pdf: { - download: { - count: 0, - }, - }, - png: { - download: { - count: 0, - }, - }, - }, - visualization: { - pdf: { - download: { - count: 0, - }, - }, - png: { - download: { - count: 0, - }, - }, - }, - notebook: { - pdf: { - download: { - count: 0, - }, - }, - png: { - download: { - count: 0, - }, - }, - }, - saved_search: { - csv: { - download: { - count: 0, - }, - }, - }, -}; diff --git a/dashboards-reports/server/routes/utils/converters/__tests__/backendToUi.test.ts b/dashboards-reports/server/routes/utils/converters/__tests__/backendToUi.test.ts deleted file mode 100644 index 4877f807..00000000 --- a/dashboards-reports/server/routes/utils/converters/__tests__/backendToUi.test.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { ReportingConfig } from 'server/config/config'; -import { - BackendReportInstanceType, - BACKEND_DELIVERY_FORMAT, - BACKEND_REPORT_FORMAT, - BACKEND_REPORT_SOURCE, - BACKEND_REPORT_STATE, - BACKEND_TRIGGER_TYPE, -} from '../../../../model/backendModel'; -import { backendToUiReport } from '../backendToUi'; - -const input: BackendReportInstanceType = { - id: 'ScvStHUBQ1Iwo-aR31dV', - lastUpdatedTimeMs: 1605056644321, - createdTimeMs: 1605056520018, - beginTimeMs: 1605054720000, - endTimeMs: 1605056520000, - access: ['roleId'], - reportDefinitionDetails: { - id: 'OMvRtHUBQ1Iwo-aRcFdO', - lastUpdatedTimeMs: 1605056426053, - createdTimeMs: 1605056426053, - access: ['roleId'], - reportDefinition: { - name: 'cron-email', - isEnabled: true, - source: { - description: 'some random', - type: BACKEND_REPORT_SOURCE.dashboard, - origin: 'http://localhost:5601', - id: '722b74f0-b882-11e8-a6d9-e546fe2bba5f', - }, - format: { - duration: 'PT30M', - fileFormat: BACKEND_REPORT_FORMAT.pdf, - header: '

test header

', - footer: '

fake footer

', - }, - trigger: { - triggerType: BACKEND_TRIGGER_TYPE.cronSchedule, - schedule: { - cron: { - expression: '2 17 * * *', - timezone: 'PST8PDT', - }, - }, - }, - delivery: { - title: 'test email subject', - textDescription: '- test\n- optional\n- message', - htmlDescription: - '
    \n
  • test
  • \n
  • optional
  • \n
  • message
  • \n
', - configIds: [], - }, - }, - }, - status: BACKEND_REPORT_STATE.success, -}; - -const sampleServerBasePath = '/test'; - -const output = { - query_url: `${sampleServerBasePath}/app/dashboards#/view/722b74f0-b882-11e8-a6d9-e546fe2bba5f?_g=(time:(from:'2020-11-11T00:32:00.000Z',to:'2020-11-11T01:02:00.000Z'))`, - time_from: 1605054720000, - time_to: 1605056520000, - last_updated: 1605056644321, - time_created: 1605056520018, - state: 'Shared', - report_definition: { - report_params: { - report_name: 'cron-email', - report_source: 'Dashboard', - description: 'some random', - core_params: { - base_url: `${sampleServerBasePath}/app/dashboards#/view/722b74f0-b882-11e8-a6d9-e546fe2bba5f`, - report_format: 'pdf', - header: '

test header

', - footer: '

fake footer

', - time_duration: 'PT30M', - origin: 'http://localhost:5601', - window_width: 1600, - window_height: 800, - }, - }, - trigger: { - trigger_type: 'Schedule', - trigger_params: { - enabled_time: 1605056426053, - enabled: true, - schedule_type: 'Cron based', - schedule: { cron: { expression: '2 17 * * *', timezone: 'PST8PDT' } }, - }, - }, - delivery: { - title: 'test email subject', - textDescription: '- test\n- optional\n- message', - htmlDescription: - '
    \n
  • test
  • \n
  • optional
  • \n
  • message
  • \n
', - configIds: [], - }, - time_created: 1605056426053, - last_updated: 1605056426053, - status: 'Active', - }, -}; - -describe('test backend to ui model conversion', () => { - test('convert backend to ui report', async () => { - const res = backendToUiReport(input, sampleServerBasePath); - expect(res).toEqual(output); - }, 20000); -}); diff --git a/dashboards-reports/server/routes/utils/converters/__tests__/uiToBackend.test.ts b/dashboards-reports/server/routes/utils/converters/__tests__/uiToBackend.test.ts deleted file mode 100644 index a1fbe6d6..00000000 --- a/dashboards-reports/server/routes/utils/converters/__tests__/uiToBackend.test.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { ReportDefinitionSchemaType } from 'server/model'; -import { - DELIVERY_TYPE, - FORMAT, - REPORT_TYPE, - SCHEDULE_TYPE, - TRIGGER_TYPE, -} from '../../constants'; -import { uiToBackendReportDefinition } from '../uiToBackend'; - -/** - * The mock and sample input. - */ -const input: ReportDefinitionSchemaType = { - report_params: { - report_name: 'test report table order', - report_source: REPORT_TYPE.savedSearch, - description: 'Hi this is your saved search on demand', - core_params: { - base_url: '/app/discover#/view/7adfa750-4c81-11e8-b3d7-01146121b73d', - saved_search_id: 'ddd8f430-f2ef-11ea-8c86-81a0b21b4b67', - report_format: FORMAT.csv, - time_duration: 'PT5M', - limit: 10000, - excel: true, - origin: 'http://localhost:5601', - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, - trigger: { - trigger_type: TRIGGER_TYPE.schedule, - trigger_params: { - schedule_type: SCHEDULE_TYPE.recurring, - schedule: { - interval: { - period: 2, - unit: 'Minutes', - start_time: 1599609062156, - }, - }, - enabled_time: 1599609062156, - enabled: true, - }, - }, -}; - -const output = { - name: 'test report table order', - isEnabled: true, - source: { - description: 'Hi this is your saved search on demand', - type: 'SavedSearch', - id: '7adfa750-4c81-11e8-b3d7-01146121b73d', - origin: 'http://localhost:5601', - }, - format: { duration: 'PT5M', fileFormat: 'Csv', limit: 10000 }, - trigger: { - triggerType: 'IntervalSchedule', - schedule: { - interval: { period: 2, unit: 'Minutes', start_time: 1599609062156 }, - }, - }, - delivery: { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }, -}; - -describe('test ui to backend model conversion', () => { - test('convert ui to backend report instance', async () => { - const res = uiToBackendReportDefinition(input); - expect(res).toEqual(output); - }, 20000); -}); diff --git a/dashboards-reports/server/routes/utils/converters/backendToUi.ts b/dashboards-reports/server/routes/utils/converters/backendToUi.ts deleted file mode 100644 index 0d9b9816..00000000 --- a/dashboards-reports/server/routes/utils/converters/backendToUi.ts +++ /dev/null @@ -1,391 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { - DataReportSchemaType, - DeliverySchemaType, - reportDefinitionSchema, - ReportDefinitionSchemaType, - ReportSchemaType, - TriggerSchemaType, - VisualReportSchemaType, -} from '../../../model'; -import { - BackendReportDefinitionDetailsType, - BackendReportInstanceType, - BACKEND_REPORT_FORMAT, - BACKEND_REPORT_SOURCE, - BACKEND_REPORT_STATE, - CronType, - DeliveryType, - IntervalType, - REPORT_FORMAT_DICT, - REPORT_SOURCE_DICT, - REPORT_STATE_DICT, - TRIGGER_TYPE_DICT, - URL_PREFIX_DICT, -} from '../../../model/backendModel'; -import { - DEFAULT_MAX_SIZE, - DELIVERY_TYPE, - FORMAT, - REPORT_DEFINITION_STATUS, - REPORT_STATE, - REPORT_TYPE, - SCHEDULE_TYPE, - TRIGGER_TYPE, -} from '../constants'; -import moment from 'moment'; -import { parse } from 'url'; - -export const backendToUiReport = ( - backendReportInstance: BackendReportInstanceType, - serverBasePath: string -): ReportSchemaType => { - const { - inContextDownloadUrlPath, - beginTimeMs, - endTimeMs, - tenant, - status, - lastUpdatedTimeMs: reportLastUpdatedTimeMs, - createdTimeMs: reportCreatedTimeMs, - reportDefinitionDetails: backendReportDefinitionDetails, - } = backendReportInstance; - - const { - reportDefinition: { - source: { type: sourceType, id: sourceId }, - delivery, - }, - } = backendReportDefinitionDetails; - - const baseUrl = getBaseUrl(sourceType, sourceId); - - let report: ReportSchemaType = { - // inContextDownloadUrlPath may not exist for report instance created from scheduled job - query_url: - inContextDownloadUrlPath || - getUiQueryUrl(baseUrl, beginTimeMs, endTimeMs, tenant), - time_from: beginTimeMs, - time_to: endTimeMs, - last_updated: reportLastUpdatedTimeMs, - time_created: reportCreatedTimeMs, - state: getUiReportState(status, delivery), - report_definition: backendToUiReportDefinition( - backendReportDefinitionDetails, - serverBasePath - ), - }; - - // Add severbasePath back to query_url - report.query_url = serverBasePath + report.query_url; - - return report; -}; - -export const backendToUiReportsList = ( - backendReportsList: BackendReportInstanceType[], - serverBasePath: string -) => { - const res = backendReportsList.map((backendReport) => { - return { - _id: backendReport.id, - _source: backendToUiReport(backendReport, serverBasePath), - }; - }); - return res; -}; - -export const backendToUiReportDefinition = ( - backendReportDefinitionDetails: BackendReportDefinitionDetailsType, - serverBasePath: string -): ReportDefinitionSchemaType => { - const { - lastUpdatedTimeMs, - createdTimeMs, - reportDefinition: { - name, - isEnabled, - source: { type: sourceType, description, id: sourceId, origin }, - format: { fileFormat, duration, header, footer, limit }, - trigger: { triggerType, schedule }, - delivery, - }, - } = backendReportDefinitionDetails; - - const baseUrl = getBaseUrl(sourceType, sourceId); - const reportSource = getUiReportSource(sourceType); - let uiReportDefinition: ReportDefinitionSchemaType = { - report_params: { - report_name: name, - report_source: reportSource, - description: description, - core_params: - reportSource === REPORT_TYPE.savedSearch - ? getDataReportCoreParams( - limit, - sourceId, - fileFormat, - duration, - baseUrl, - origin - ) - : getVisualReportCoreParams( - fileFormat, - header, - footer, - duration, - baseUrl, - origin - ), - }, - trigger: getUiTriggerParams( - triggerType, - schedule, - createdTimeMs, - isEnabled - ), - delivery: getUiDeliveryParams(delivery), //TODO: - time_created: createdTimeMs, - last_updated: lastUpdatedTimeMs, - status: getUiReportDefinitionStatus(isEnabled), - }; - // validate to assign default values to some fields for UI model - uiReportDefinition = reportDefinitionSchema.validate(uiReportDefinition); - uiReportDefinition.report_params.core_params.base_url = - serverBasePath + uiReportDefinition.report_params.core_params.base_url; - return uiReportDefinition; -}; - -export const backendToUiReportDefinitionsList = ( - backendReportDefinitionDetailsList: BackendReportDefinitionDetailsType[], - serverBasePath: string -) => { - const res = backendReportDefinitionDetailsList.map( - (backendReportDefinitionDetails) => { - return { - _id: backendReportDefinitionDetails.id, - _source: { - // TODO: this property can be removed, but need UI changes as well - report_definition: backendToUiReportDefinition( - backendReportDefinitionDetails, - serverBasePath - ), - }, - }; - } - ); - return res; -}; - -const getVisualReportCoreParams = ( - fileFormat: BACKEND_REPORT_FORMAT, - header: string = '', - footer: string = '', - duration: string, - baseUrl: string, - origin: string -): VisualReportSchemaType => { - let res: VisualReportSchemaType = { - base_url: baseUrl, - report_format: getUiReportFormat(fileFormat), - header: header, - footer: footer, - time_duration: duration, - origin: origin, - }; - return res; -}; - -// queryUrl = baseUrl + time range -const getUiQueryUrl = ( - baseUrl: string, - beginTimeMs: number, - endTimeMs: number, - tenant?: string -) => { - const timeFrom = moment(beginTimeMs).toISOString(); - const timeTo = moment(endTimeMs).toISOString(); - let queryUrl = `${baseUrl}?_g=(time:(from:'${timeFrom}',to:'${timeTo}'))`; - if (tenant !== undefined) { - if (tenant === '') { - tenant = 'global'; - } else if (tenant === '__user__') { - tenant = 'private'; - } - queryUrl = addTenantToURL(queryUrl, tenant); - } - - return queryUrl; -}; - -const getBaseUrl = (sourceType: BACKEND_REPORT_SOURCE, sourceId: string) => { - //TODO: AES domain has different prefix, need figure out a general solution - const baseUrl = `${URL_PREFIX_DICT[sourceType]}${sourceId}`; - return baseUrl; -}; - -const getDataReportCoreParams = ( - limit: number = DEFAULT_MAX_SIZE, - sourceId: string, - fileFormat: BACKEND_REPORT_FORMAT, - duration: string, - baseUrl: string, - origin: string -): DataReportSchemaType => { - let res: DataReportSchemaType = { - base_url: baseUrl, - report_format: getUiReportFormat(fileFormat), - limit: limit, - time_duration: duration, - saved_search_id: sourceId, - origin: origin, - }; - return res; -}; - -const getUiScheduleParams = ( - schedule: CronType | IntervalType | undefined, - createdTimeMs: number, - isEnabled: boolean -) => { - let res = { - trigger_params: { - enabled_time: createdTimeMs, - enabled: isEnabled, - schedule_type: - schedule && 'cron' in schedule - ? SCHEDULE_TYPE.cron - : SCHEDULE_TYPE.recurring, - schedule: schedule, - }, - }; - return res; -}; - -const getUiTriggerType = (backendField: string): TRIGGER_TYPE => { - let res: any; - for (let [ui, backendFieldList] of Object.entries(TRIGGER_TYPE_DICT)) { - for (let item of backendFieldList) { - if (item === backendField) { - res = ui; - } - } - } - return res; -}; - -const getUiReportFormat = (backendField: string): FORMAT => { - let res: any; - for (let [ui, backend] of Object.entries(REPORT_FORMAT_DICT)) { - if (backend === backendField) { - res = ui; - } - } - return res; -}; - -const getUiReportState = ( - status: BACKEND_REPORT_STATE, - delivery: any -): REPORT_STATE => { - let res: any; - for (let [ui, backend] of Object.entries(REPORT_STATE_DICT)) { - if (backend === status) { - // distinguish "shared" and "created" - if (status === BACKEND_REPORT_STATE.success && delivery) { - res = REPORT_STATE.shared; - } else { - res = ui; - } - } else if (status === BACKEND_REPORT_STATE.scheduled) { - // corner case - res = REPORT_STATE.pending; - } - } - return res; -}; - -const getUiReportSource = (type: BACKEND_REPORT_SOURCE): REPORT_TYPE => { - let res: any; - for (let [ui, backend] of Object.entries(REPORT_SOURCE_DICT)) { - if (backend === type) { - res = ui; - } - } - return res; -}; - -const getUiReportDefinitionStatus = ( - isEnabled: any -): REPORT_DEFINITION_STATUS => { - return isEnabled - ? REPORT_DEFINITION_STATUS.active - : REPORT_DEFINITION_STATUS.disabled; -}; - -const getUiTriggerParams = ( - triggerType: any, - schedule: CronType | IntervalType | undefined, - createdTimeMs: number, - isEnabled: boolean -): TriggerSchemaType => { - let res: TriggerSchemaType = { - trigger_type: getUiTriggerType(triggerType), - ...(getUiTriggerType(triggerType) === TRIGGER_TYPE.schedule && - getUiScheduleParams(schedule, createdTimeMs, isEnabled)), - }; - - return res; -}; - -// Delivery -const getUiDeliveryParams = ( - delivery: DeliveryType | undefined -): DeliverySchemaType => { - const opensearchDashboardsUserDeliveryParams = { - configIds: [], - title: '', - textDescription: '', - htmlDescription: '' - }; - - let params: any; - if (delivery) { - const { ...rest } = delivery; - params = { - ...rest - }; - } else { - params = opensearchDashboardsUserDeliveryParams; - } - return params; -}; - -// helper function to add tenant info to url(if tenant is available) -const addTenantToURL = (url: string, userRequestedTenant: string) => { - // build fake url from relative url - const fakeUrl = `http://opensearch.com${url}`; - const tenantKey = 'security_tenant'; - const tenantKeyAndValue = - tenantKey + '=' + encodeURIComponent(userRequestedTenant); - - const { pathname, search } = parse(fakeUrl); - const queryDelimiter = !search ? '?' : '&'; - - // The url parser returns null if the search is empty. Change that to an empty - // string so that we can use it to build the values later - if (search && search.toLowerCase().indexOf(tenantKey) > -1) { - // If we for some reason already have a tenant in the URL we skip any updates - return url; - } - - // A helper for finding the part in the string that we want to extend/replace - const valueToReplace = pathname! + (search || ''); - const replaceWith = valueToReplace + queryDelimiter + tenantKeyAndValue; - - return url.replace(valueToReplace, replaceWith); -}; diff --git a/dashboards-reports/server/routes/utils/converters/uiToBackend.ts b/dashboards-reports/server/routes/utils/converters/uiToBackend.ts deleted file mode 100644 index 4a2064cd..00000000 --- a/dashboards-reports/server/routes/utils/converters/uiToBackend.ts +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { - ChannelSchemaType, - DeliverySchemaType, - ReportDefinitionSchemaType, - ScheduleSchemaType, - TriggerSchemaType, -} from '../../../model'; -import { - BackendReportDefinitionType, - BACKEND_DELIVERY_FORMAT, - BACKEND_REPORT_FORMAT, - BACKEND_REPORT_SOURCE, - BACKEND_REPORT_STATE, - BACKEND_TRIGGER_TYPE, - DeliveryType, - REPORT_FORMAT_DICT, - REPORT_SOURCE_DICT, - REPORT_STATE_DICT, -} from '../../../model/backendModel'; -import { - DELIVERY_TYPE, - FORMAT, - REPORT_STATE, - REPORT_TYPE, - SCHEDULE_TYPE, -} from '../constants'; - -export const uiToBackendReportDefinition = ( - reportDefinition: ReportDefinitionSchemaType -): BackendReportDefinitionType => { - const { - report_params: { - report_name: reportName, - description, - report_source: reportSource, - core_params: { - base_url: baseUrl, - time_duration: timeDuration, - report_format: reportFormat, - header, - footer, - limit, - origin, - }, - }, - trigger, - delivery, - } = reportDefinition; - - let backendReportDefinition: BackendReportDefinitionType = { - name: reportName, - isEnabled: getBackendIsEnabled(trigger), - source: { - description: description, - type: getBackendReportSource(reportSource), - id: getBackendReportSourceId(baseUrl), - origin: origin, - }, - format: { - duration: timeDuration, - fileFormat: getBackendReportFormat(reportFormat), - ...(limit && { limit: limit }), - ...(header && { header: header }), - ...(footer && { footer: footer }), - }, - trigger: getBackendTrigger(trigger), - ...(getBackendDelivery(delivery) && { - delivery: getBackendDelivery(delivery), - }), - }; - return backendReportDefinition; -}; - -const getBackendIsEnabled = (trigger: TriggerSchemaType) => { - let enabled = true; - if (trigger.trigger_params) { - enabled = trigger.trigger_params.enabled; - } - return enabled; -}; - -const getBackendDelivery = ( - delivery: DeliverySchemaType -): DeliveryType | undefined => { - const { - configIds: configIds, - title: title, - textDescription: textDescription, - htmlDescription: htmlDescription - } = delivery; - let res = { - configIds: configIds, - title: title, - textDescription: textDescription, - htmlDescription: htmlDescription - } - return res; -}; - -const getBackendTrigger = (trigger: TriggerSchemaType) => { - const { trigger_params: scheduleParams } = trigger; - const { schedule } = { ...scheduleParams }; - let res = { - triggerType: scheduleParams - ? getBackendTriggerType(scheduleParams) - : BACKEND_TRIGGER_TYPE.onDemand, - schedule: schedule, - }; - return res; -}; - -const getBackendTriggerType = ( - scheduleParams: ScheduleSchemaType -): BACKEND_TRIGGER_TYPE => { - const { schedule_type: scheduleType } = scheduleParams; - let res; - switch (scheduleType) { - case SCHEDULE_TYPE.cron: - res = BACKEND_TRIGGER_TYPE.cronSchedule; - break; - case SCHEDULE_TYPE.recurring: - res = BACKEND_TRIGGER_TYPE.intervalSchedule; - break; - } - return res; -}; - -const getBackendReportFormat = ( - reportFormat: FORMAT -): BACKEND_REPORT_FORMAT => { - return REPORT_FORMAT_DICT[reportFormat]; -}; - -export const getBackendReportState = ( - reportState: REPORT_STATE -): BACKEND_REPORT_STATE => { - return REPORT_STATE_DICT[reportState]; -}; - -export const getBackendReportSource = ( - reportSource: REPORT_TYPE -): BACKEND_REPORT_SOURCE => { - return REPORT_SOURCE_DICT[reportSource]; -}; -//TODO: tmp solution, we are extracting the id from the baseUrl, e.g. /app/dashboards#/view/ -// since currently dashboard/visualization id are not required in the UI model, will add in the future -const getBackendReportSourceId = (baseUrl: string): string => { - const id = baseUrl.split('/').pop() || ''; - return id; -}; diff --git a/dashboards-reports/server/routes/utils/dataReportHelpers.ts b/dashboards-reports/server/routes/utils/dataReportHelpers.ts deleted file mode 100644 index a7bee2b9..00000000 --- a/dashboards-reports/server/routes/utils/dataReportHelpers.ts +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import esb, { Sort } from 'elastic-builder'; -import converter from 'json-2-csv'; -import _ from 'lodash'; -import moment from 'moment'; -import { DATA_REPORT_CONFIG } from './constants'; -import { - buildOpenSearchQuery, - Filter, - Query, - OpenSearchQueryConfig, -} from '../../../../../src/plugins/data/common'; - -export var metaData = { - saved_search_id: null, - report_format: null, - start: null, - end: null, - fields: null, - type: null, - timeFieldName: null, - sorting: null, - fields_exist: false, - selectedFields: [], - paternName: null, - searchSourceJSON: [], - dateFields: [], -}; - -// Get the selected columns by the user. -export const getSelectedFields = async (columns) => { - const selectedFields = []; - let fields_exist = false; - for (let column of columns) { - if (column !== '_source') { - fields_exist = true; - selectedFields.push(column); - } else { - fields_exist = false; - selectedFields.push('_source'); - } - } - metaData.fields_exist = fields_exist; - metaData.selectedFields = selectedFields; -}; - -// Build the OpenSearch query from the meta data -// is_count is set to 1 if we building the count query but 0 if we building the fetch data query -export const buildRequestBody = (report: any, allowLeadingWildcards: boolean, is_count: number) => { - let esbBoolQuery = esb.boolQuery(); - const searchSourceJSON = report._source.searchSourceJSON; - const savedObjectQuery: Query = JSON.parse(searchSourceJSON).query; - const savedObjectFilter: Filter = JSON.parse(searchSourceJSON).filter; - const savedObjectConfig: OpenSearchQueryConfig = { - allowLeadingWildcards: allowLeadingWildcards, - queryStringOptions: {}, - ignoreFilterIfFieldNotInIndex: false, - } - const QueryFromSavedObject = buildOpenSearchQuery( - undefined, - savedObjectQuery, - savedObjectFilter, - savedObjectConfig, - ); - // Add time range - if (report._source.timeFieldName && report._source.timeFieldName.length > 0) { - esbBoolQuery.must( - esb - .rangeQuery(report._source.timeFieldName) - .format('epoch_millis') - .gte(report._source.start - 1) - .lte(report._source.end + 1) - ); - } - if (is_count) { - return esb.requestBodySearch().query(esbBoolQuery); - } - - // Add sorting to the query - let esbSearchQuery = esb - .requestBodySearch() - .query(esbBoolQuery) - .version(true); - - if (report._source.sorting.length > 0) { - const sortings: Sort[] = report._source.sorting.map((element: string[]) => { - return esb.sort(element[0], element[1]); - }); - esbSearchQuery.sorts(sortings); - } - - // add selected fields to query - if (report._source.fields_exist) { - esbSearchQuery.source({ includes: report._source.selectedFields }); - } - // Add a customizer to merge queries to generate request body - let requestBody = _.mergeWith( - { query: QueryFromSavedObject }, - esbSearchQuery.toJSON(), - (objValue, srcValue) => { - if (_.isArray(objValue)) { - return objValue.concat(srcValue); - } - } - ); - - requestBody = addDocValueFields(report, requestBody); - return requestBody; -}; - -// Fetch the data from OpenSearch -export const getOpenSearchData = ( - arrayHits, - report, - params, - dateFormat: string -) => { - let hits: any = []; - for (let valueRes of arrayHits) { - for (let data of valueRes.hits) { - const fields = data.fields; - // get all the fields of type date and format them to excel format - for (let dateField of report._source.dateFields) { - const dateValue = data._source[dateField]; - if (dateValue && dateValue.length !== 0) { - if (dateValue instanceof Array) { - // loop through array - dateValue.forEach((element, index) => { - data._source[dateField][index] = moment( - fields[dateField][index] - ).format(dateFormat); - }); - } else { - // The fields response always returns an array of values for each field - // https://www.elastic.co/guide/en/elasticsearch/reference/master/search-fields.html#search-fields-response - data._source[dateField] = moment(fields[dateField][0]).format( - dateFormat - ); - } - } - } - delete data['fields']; - if (report._source.fields_exist === true) { - let result = traverse(data, report._source.selectedFields); - hits.push(params.excel ? sanitize(result) : result); - } else { - hits.push(params.excel ? sanitize(data) : data); - } - // Truncate to expected limit size - if (hits.length >= params.limit) { - return hits; - } - } - } - return hits; -}; - -//Convert the data to Csv format -export const convertToCSV = async (dataset, csvSeparator) => { - let convertedData: any = []; - const options = { - delimiter: { field: csvSeparator, eol: '\n' }, - emptyFieldValue: ' ', - }; - await converter.json2csvAsync(dataset[0], options).then((csv) => { - convertedData = csv; - }); - return convertedData; -}; - -function flattenHits(hits, result = {}, prefix = '') { - for (const [key, value] of Object.entries(hits)) { - if (!hits.hasOwnProperty(key)) continue; - if ( - value != null && - typeof value === 'object' && - !Array.isArray(value) && - Object.keys(value).length > 0 - ) { - flattenHits(value, result, prefix + key + '.'); - } else { - result[prefix.replace(/^_source\./, '') + key] = value; - } - } - return result; -} - -//Return only the selected fields -function traverse(data, keys, result = {}) { - data = flattenHits(data); - const sourceKeys = Object.keys(data); - keys.forEach((key) => { - const value = _.get(data, key, undefined); - if (value !== undefined) result[key] = value; - else { - Object.keys(data) - .filter((sourceKey) => sourceKey.startsWith(key + '.')) - .forEach((sourceKey) => (result[sourceKey] = data[sourceKey])); - } - }); - return result; -} - -/** - * Escape special characters if field value prefixed with. - * This is intend to avoid CSV injection in Microsoft Excel. - * @param doc document - */ -function sanitize(doc: any) { - for (const field in doc) { - if (doc[field] == null) continue; - if ( - doc[field].toString().startsWith('+') || - (doc[field].toString().startsWith('-') && - typeof doc[field] !== 'number') || - doc[field].toString().startsWith('=') || - doc[field].toString().startsWith('@') - ) { - doc[field] = "'" + doc[field]; - } - } - return doc; -} - -const addDocValueFields = (report: any, requestBody: any) => { - const docValues = []; - for (const dateType of report._source.dateFields) { - docValues.push({ - field: dateType, - format: 'date_hour_minute_second_fraction', - }); - } - // elastic-builder doesn't provide function to build docvalue_fields with format, - // this is a workaround which appends docvalues field to the request body. - requestBody = { - ...requestBody, - docvalue_fields: docValues, - }; - return requestBody; -}; diff --git a/dashboards-reports/server/routes/utils/helpers.ts b/dashboards-reports/server/routes/utils/helpers.ts deleted file mode 100644 index 5bada6d0..00000000 --- a/dashboards-reports/server/routes/utils/helpers.ts +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { OpenSearchDashboardsResponseFactory } from '../../../../../src/core/server'; -import { v1 as uuidv1 } from 'uuid'; -import { - ILegacyClusterClient, - ILegacyScopedClusterClient, -} from '../../../../../src/core/server'; - -/** - * OpenSearch error response body: - * { - * error: { - * root_cause: [{ type: 'status_exception', reason: 'test exception' }], - * type: 'status_exception', - * reason: 'test exception', - * }, - * status: 404, - * }; - * - */ -export function parseOpenSearchErrorResponse(error: any) { - if (error.response) { - try { - const opensearchErrorResponse = JSON.parse(error.response); - return opensearchErrorResponse.error.reason || error.response; - } catch (parsingError) { - return error.response; - } - } - return error.message; -} - -export function errorResponse(response: OpenSearchDashboardsResponseFactory, error: any) { - return response.custom({ - statusCode: error.statusCode || 500, - body: parseOpenSearchErrorResponse(error), - }); -} - -/** - * Generate report file name based on name and timestamp. - * @param itemName report item name - * @param timeCreated timestamp when this is being created - */ -export function getFileName(itemName: string, timeCreated: Date): string { - return `${itemName}_${timeCreated.toISOString()}_${uuidv1()}`; -} - -/** - * Call OpenSearch cluster function. - * @param client OpenSearch client - * @param endpoint OpenSearch API method - * @param params OpenSearch API parameters - */ -export const callCluster = async ( - client: ILegacyClusterClient | ILegacyScopedClusterClient, - endpoint: string, - params: any, - isScheduledTask: boolean -) => { - let opensearchResp; - if (isScheduledTask) { - opensearchResp = await (client as ILegacyClusterClient).callAsInternalUser( - endpoint, - params - ); - } else { - opensearchResp = await (client as ILegacyScopedClusterClient).callAsCurrentUser( - endpoint, - params - ); - } - return opensearchResp; -}; - -export const checkErrorType = (error: any) => { - if (error.statusCode && Math.floor(error.statusCode / 100) === 4) { - return 'user_error'; - } else { - return 'system_error'; - } -}; - -export const joinRequestParams = ( - queryParams: string | string[] | undefined -) => { - if (Array.isArray(queryParams)) return queryParams.join(','); - if (typeof queryParams === 'string') return queryParams; - return ''; -}; \ No newline at end of file diff --git a/dashboards-reports/server/routes/utils/metricHelper.ts b/dashboards-reports/server/routes/utils/metricHelper.ts deleted file mode 100644 index d58876dc..00000000 --- a/dashboards-reports/server/routes/utils/metricHelper.ts +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { ReportSchemaType } from 'server/model'; -import { - EntityType, - CountersNameType, - CountersType, - ActionType, -} from './types'; -import _ from 'lodash'; -import { - CAPACITY, - DEFAULT_ROLLING_COUNTER, - GLOBAL_BASIC_COUNTER, - INTERVAL, - WINDOW, -} from './constants'; - -export const time2CountWin: Map = new Map(); - -export const addToMetric = ( - entity: EntityType, - action: ActionType, - counter: CountersNameType, - reportMetadata?: ReportSchemaType -) => { - const count = 1; - // remove outdated key-value pairs - trim(); - - const timeKey = getKey(Date.now()); - const rollingCounters = time2CountWin.get(timeKey); - - time2CountWin.set( - timeKey, - updateCounters( - entity, - action, - counter, - rollingCounters || _.cloneDeep(DEFAULT_ROLLING_COUNTER), - count, - reportMetadata - ) - ); -}; - -export const getMetrics = () => { - const preTimeKey = getPreKey(Date.now()); - const rollingCounters = time2CountWin.get(preTimeKey); - const metrics = buildMetrics(rollingCounters); - return metrics; -}; - -const trim = () => { - if (time2CountWin.size > CAPACITY) { - const currentKey = getKey(Date.now() - WINDOW * 1000); - time2CountWin.forEach((_value, key, map) => { - if (key < currentKey) { - map.delete(key); - } - }); - } -}; - -const getKey = (milliseconds: number) => { - return Math.floor(milliseconds / 1000 / INTERVAL); -}; - -const getPreKey = (milliseconds: number) => { - return getKey(milliseconds) - 1; -}; - -const isEntity = (arg: string): arg is EntityType => { - return ( - arg === 'report' || arg === 'report_definition' || arg === 'report_source' - ); -}; - -const buildMetrics = (rollingCounters: CountersType | undefined) => { - if (!rollingCounters) { - rollingCounters = DEFAULT_ROLLING_COUNTER; - } - const basicMetrics = _.merge(rollingCounters, GLOBAL_BASIC_COUNTER); - const overallActionMetrics = { - request_total: 0, - request_count: 0, - success_count: 0, - failed_request_count_system_error: 0, - failed_request_count_user_error: 0, - }; - Object.keys(basicMetrics).forEach((keys) => { - if (isEntity(keys)) { - for (const [action, counters] of Object.entries(basicMetrics[keys])) { - overallActionMetrics.request_count += counters?.count || 0; - overallActionMetrics.request_total += counters?.total || 0; - overallActionMetrics.failed_request_count_system_error += - counters?.system_error || 0; - overallActionMetrics.failed_request_count_user_error += - counters?.user_error || 0; - } - } - }); - overallActionMetrics.success_count = - overallActionMetrics.request_count - - (overallActionMetrics.failed_request_count_system_error + - overallActionMetrics.failed_request_count_user_error); - - return { ...basicMetrics, ...overallActionMetrics }; -}; - -const updateCounters = ( - entity: EntityType, - action: ActionType, - counter: CountersNameType, - rollingCounter: CountersType, - count: number, - reportMetadata?: ReportSchemaType -) => { - // update usage metrics - if (reportMetadata) { - const { - report_definition: { - report_params: { - report_source: source, - core_params: { report_format: format }, - }, - }, - } = reportMetadata; - - // @ts-ignore - rollingCounter[source.toLowerCase().replace(' ', '_')][format]['download'][ - counter - ] += count; - // update basic counter for total request count - if (counter === 'count') { - //@ts-ignore - GLOBAL_BASIC_COUNTER[source.toLowerCase().replace(' ', '_')][format][ - 'download' - ]['total']++; - } - } else { - // update action metric, per API - // @ts-ignore - rollingCounter[entity][action][counter] += count; - if (counter === 'count') { - // @ts-ignore - GLOBAL_BASIC_COUNTER[entity][action]['total']++; - } - } - return rollingCounter; -}; diff --git a/dashboards-reports/server/routes/utils/savedSearchReportHelper.ts b/dashboards-reports/server/routes/utils/savedSearchReportHelper.ts deleted file mode 100644 index b5c58bea..00000000 --- a/dashboards-reports/server/routes/utils/savedSearchReportHelper.ts +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { - buildRequestBody, - convertToCSV, - getOpenSearchData, - getSelectedFields, - metaData, -} from './dataReportHelpers'; -import { - ILegacyClusterClient, - ILegacyScopedClusterClient, - Logger, -} from '../../../../../src/core/server'; -import { getFileName, callCluster } from './helpers'; -import { CreateReportResultType } from './types'; -import { RequestParams } from '@elastic/elasticsearch'; -import esb from 'elastic-builder'; - -/** - * Specify how long scroll context should be maintained for scrolled search - */ -const scrollTimeout = '1m'; - -export async function createSavedSearchReport( - report: any, - client: ILegacyClusterClient | ILegacyScopedClusterClient, - dateFormat: string, - csvSeparator: string, - allowLeadingWildcards: boolean, - isScheduledTask: boolean = true, - logger: Logger -): Promise { - const params = report.report_definition.report_params; - const reportFormat = params.core_params.report_format; - const reportName = params.report_name; - - await populateMetaData(client, report, isScheduledTask, logger); - const data = await generateReportData( - client, - params.core_params, - dateFormat, - csvSeparator, - allowLeadingWildcards, - isScheduledTask, - logger - ); - - const curTime = new Date(); - const timeCreated = curTime.valueOf(); - const fileName = getFileName(reportName, curTime) + '.' + reportFormat; - return { - timeCreated, - dataUrl: data, - fileName, - }; -} - -/** - * Populate parameters and saved search info related to meta data object. - * @param client OpenSearch client - * @param report Report input - */ -async function populateMetaData( - client: ILegacyClusterClient | ILegacyScopedClusterClient, - report: any, - isScheduledTask: boolean, - logger: Logger -) { - metaData.saved_search_id = - report.report_definition.report_params.core_params.saved_search_id; - metaData.report_format = - report.report_definition.report_params.core_params.report_format; - metaData.start = report.time_from; - metaData.end = report.time_to; - - // Get saved search info - let resIndexPattern: any = {}; - const ssParams = { - index: '.kibana', - id: 'search:' + metaData.saved_search_id, - }; - const ssInfos = await callCluster(client, 'get', ssParams, isScheduledTask); - - metaData.sorting = ssInfos._source.search.sort; - metaData.type = ssInfos._source.type; - metaData.searchSourceJSON = - ssInfos._source.search.kibanaSavedObjectMeta.searchSourceJSON; - - // Get the list of selected columns in the saved search.Otherwise select all the fields under the _source - await getSelectedFields(ssInfos._source.search.columns); - - // Get index name - for (const item of ssInfos._source.references) { - if (item.name === JSON.parse(metaData.searchSourceJSON).indexRefName) { - // Get index-pattern information - const indexPattern = await callCluster( - client, - 'get', - { - index: '.kibana', - id: 'index-pattern:' + item.id, - }, - isScheduledTask - ); - resIndexPattern = indexPattern._source['index-pattern']; - metaData.paternName = resIndexPattern.title; - (metaData.timeFieldName = resIndexPattern.timeFieldName), - (metaData.fields = resIndexPattern.fields); // Get all fields - // Getting fields of type Date - const dateFields = []; - for (const item of JSON.parse(metaData.fields)) { - if (item.type === 'date') { - dateFields.push(item.name); - } - } - metaData.dateFields = dateFields; - } - } -} - -/** - * Generate CSV data by query and convert OpenSearch data set. - * @param client OpenSearch client - * @param limit limit size of result data set - */ -async function generateReportData( - client: ILegacyClusterClient | ILegacyScopedClusterClient, - params: any, - dateFormat: string, - csvSeparator: string, - allowLeadingWildcards: boolean, - isScheduledTask: boolean, - logger: Logger -) { - let opensearchData: any = {}; - const arrayHits: any = []; - const report = { _source: metaData }; - const indexPattern: string = report._source.paternName; - const maxResultSize: number = await getMaxResultSize(); - const opensearchCount = await getOpenSearchDataSize(); - - const total = Math.min(opensearchCount.count, params.limit); - if (total === 0) { - return ''; - } - - const reqBody = buildRequestBody(report, allowLeadingWildcards, 0); - logger.info( - `[Reporting csv module] DSL request body: ${JSON.stringify(reqBody)}` - ); - if (total > maxResultSize) { - await getOpenSearchDataByScroll(); - } else { - await getOpenSearchDataBySearch(); - } - return convertOpenSearchDataToCsv(); - - // Fetch OpenSearch query max size windows to decide search or scroll - async function getMaxResultSize() { - const settings = await callCluster( - client, - 'indices.getSettings', - { - index: indexPattern, - includeDefaults: true, - }, - isScheduledTask - ); - - let maxResultSize = Number.MAX_SAFE_INTEGER; - for (let indexName in settings) { - // The location of max result window differs if default overridden. - maxResultSize = Math.min( - maxResultSize, - settings[indexName].settings.index.max_result_window || - settings[indexName].defaults.index.max_result_window - ); - } - return maxResultSize; - } - - // Build the OpenSearch Count query to count the size of result - async function getOpenSearchDataSize() { - const countReq = buildRequestBody(report, allowLeadingWildcards, 1); - return await callCluster( - client, - 'count', - { - index: indexPattern, - body: countReq, - }, - isScheduledTask - ); - } - - async function getOpenSearchDataByScroll() { - const searchParams: RequestParams.Search = { - index: report._source.paternName, - scroll: scrollTimeout, - body: reqBody, - size: maxResultSize, - }; - // Open scroll context by fetching first batch - opensearchData = await callCluster( - client, - 'search', - searchParams, - isScheduledTask - ); - arrayHits.push(opensearchData.hits); - - // Start scrolling till the end - const nbScroll = Math.floor(total / maxResultSize); - for (let i = 0; i < nbScroll; i++) { - const resScroll = await callCluster( - client, - 'scroll', - { - scrollId: opensearchData._scroll_id, - scroll: scrollTimeout, - }, - isScheduledTask - ); - if (Object.keys(resScroll.hits.hits).length > 0) { - arrayHits.push(resScroll.hits); - } - } - - // Clear scroll context - await callCluster( - client, - 'clearScroll', - { - scrollId: opensearchData._scroll_id, - }, - isScheduledTask - ); - } - - async function getOpenSearchDataBySearch() { - const searchParams: RequestParams.Search = { - index: report._source.paternName, - body: reqBody, - size: total, - }; - - opensearchData = await callCluster( - client, - 'search', - searchParams, - isScheduledTask - ); - - arrayHits.push(opensearchData.hits); - } - - // Parse OpenSearch data and convert to CSV - async function convertOpenSearchDataToCsv() { - const dataset: any = []; - dataset.push(getOpenSearchData(arrayHits, report, params, dateFormat)); - return await convertToCSV(dataset, csvSeparator); - } -} diff --git a/dashboards-reports/server/routes/utils/types.ts b/dashboards-reports/server/routes/utils/types.ts deleted file mode 100644 index 3f0f21b9..00000000 --- a/dashboards-reports/server/routes/utils/types.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -export interface CreateReportResultType { - timeCreated: number; - dataUrl: string; - fileName: string; - reportId: string; - queryUrl: string; -} - -type ReportSourceType = 'dashboard' | 'visualization' | 'saved_search' | 'notebook'; -type ReportFormatType = 'pdf' | 'png' | 'csv'; -type UsageActionType = 'download'; -export type EntityType = 'report' | 'report_definition' | 'report_source'; - -export type CountersNameType = - | 'count' - | 'system_error' - | 'user_error' - | 'total'; -export type ActionType = - | 'info' - | 'list' - | 'delete' - | 'create' - | 'download' - | 'update' - | 'create_from_definition'; - -export type CountersType = ActionCountersType & UsageCountersType; - -type ActionCountersType = { - [entity in EntityType]: { - [action in ActionType]?: { - [counter in CountersNameType]?: number; - }; - }; -}; - -type UsageCountersType = { - [source in ReportSourceType]: { - [format in ReportFormatType]?: { - [action in UsageActionType]: { - [counter in CountersNameType]?: number; - }; - }; - }; -}; diff --git a/dashboards-reports/server/types.ts b/dashboards-reports/server/types.ts deleted file mode 100644 index fbb3a374..00000000 --- a/dashboards-reports/server/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface ReportsDashboardsPluginSetup {} -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface ReportsDashboardsPluginStart {} diff --git a/dashboards-reports/server/utils/__tests__/validationHelper.test.ts b/dashboards-reports/server/utils/__tests__/validationHelper.test.ts deleted file mode 100644 index 9bdb4fe0..00000000 --- a/dashboards-reports/server/utils/__tests__/validationHelper.test.ts +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { ReportDefinitionSchemaType, ReportSchemaType } from '../../model'; -import { - DELIVERY_TYPE, - FORMAT, - REPORT_TYPE, - TRIGGER_TYPE, -} from '../../routes/utils/constants'; -import { isValidRelativeUrl, validateReport, validateReportDefinition } from '../validationHelper'; - -const SAMPLE_SAVED_OBJECT_ID = '3ba638e0-b894-11e8-a6d9-e546fe2bba5f'; -const createReportDefinitionInput: ReportDefinitionSchemaType = { - report_params: { - report_name: 'test visual report', - report_source: REPORT_TYPE.dashboard, - description: 'Hi this is your Dashboard on demand', - core_params: { - base_url: `/app/dashboards#/view/${SAMPLE_SAVED_OBJECT_ID}`, - window_width: 1300, - window_height: 900, - report_format: FORMAT.pdf, - time_duration: 'PT5M', - origin: 'http://localhost:5601', - }, - }, - delivery: { - configIds: [], - title: 'title', - textDescription: 'text description', - htmlDescription: 'html description' - }, - trigger: { - trigger_type: TRIGGER_TYPE.onDemand, - }, -}; -const createReportInput: ReportSchemaType = { - query_url: `/app/dashboards#/view/${SAMPLE_SAVED_OBJECT_ID}`, - time_from: 1343576635300, - time_to: 1596037435301, - report_definition: createReportDefinitionInput, -}; - -// this is the url format used before notebooks merged into observability -const createReportDefinitionNotebookLegacyInput: ReportDefinitionSchemaType = { - report_params: { - report_name: 'test notebooks report', - report_source: REPORT_TYPE.notebook, - description: 'Hi this is your Notebook on demand', - core_params: { - base_url: `/app/notebooks-dashboards?view=output_only#/${SAMPLE_SAVED_OBJECT_ID}`, - window_width: 1300, - window_height: 900, - report_format: FORMAT.pdf, - time_duration: 'PT5M', - origin: 'http://localhost:5601', - }, - }, - delivery: { - configIds: [], - title: 'title', - textDescription: 'text description', - htmlDescription: 'html description' - }, - trigger: { - trigger_type: TRIGGER_TYPE.onDemand, - }, -} - -const createReportDefinitionNotebookInput: ReportDefinitionSchemaType = { - report_params: { - report_name: 'test notebooks report', - report_source: REPORT_TYPE.notebook, - description: 'Hi this is your Notebook on demand', - core_params: { - base_url: `/app/observability-dashboards#/notebooks/${SAMPLE_SAVED_OBJECT_ID}`, - window_width: 1300, - window_height: 900, - report_format: FORMAT.pdf, - time_duration: 'PT5M', - origin: 'http://localhost:5601', - }, - }, - delivery: { - configIds: [], - title: 'title', - textDescription: 'text description', - htmlDescription: 'html description' - }, - trigger: { - trigger_type: TRIGGER_TYPE.onDemand, - }, -} - -describe('test input validation', () => { - test('create report with correct saved object id', async () => { - const savedObjectIds = [`dashboard:${SAMPLE_SAVED_OBJECT_ID}`]; - const client = mockOpenSearchClient(savedObjectIds); - const report = await validateReport(client, createReportInput); - expect(report).toBeDefined(); - }); - - test('create report with non-exist saved object id', async () => { - const savedObjectIds = ['dashboard:fake-id']; - const client = mockOpenSearchClient(savedObjectIds); - await expect( - validateReport(client, createReportInput) - ).rejects.toThrowError( - `saved object with id dashboard:${SAMPLE_SAVED_OBJECT_ID} does not exist` - ); - }); - - test('create report definition with correct saved object id', async () => { - const savedObjectIds = [`dashboard:${SAMPLE_SAVED_OBJECT_ID}`]; - const client = mockOpenSearchClient(savedObjectIds); - const report = await validateReportDefinition( - client, - createReportDefinitionInput - ); - expect(report).toBeDefined(); - }); - - test('create notebook report definition with legacy base url format', async () => { - const savedObjectIds = [`notebook:${SAMPLE_SAVED_OBJECT_ID}`]; - const client = mockOpenSearchClient(savedObjectIds); - const report = await validateReportDefinition( - client, - createReportDefinitionNotebookLegacyInput - ); - expect(report).toBeDefined(); - }); - - test('create notebook report definition with correct base url format', async () => { - const savedObjectIds = [`notebook:${SAMPLE_SAVED_OBJECT_ID}`]; - const client = mockOpenSearchClient(savedObjectIds); - const report = await validateReportDefinition( - client, - createReportDefinitionNotebookInput - ); - expect(report).toBeDefined(); - }); - - test('create report definition with non-exist saved object id', async () => { - const savedObjectIds = ['dashboard:fake-id']; - const client = mockOpenSearchClient(savedObjectIds); - await expect( - validateReportDefinition(client, createReportDefinitionInput) - ).rejects.toThrowError( - `saved object with id dashboard:${SAMPLE_SAVED_OBJECT_ID} does not exist` - ); - }); - - test('validation against query_url', async () => { - const urls: [string, boolean][] = [ - ['/app/dashboards#/view/7adfa750-4c81-11e8-b3d7-01146121b73d?_g=', true], - [ - '/_plugin/kibana/app/dashboards#/view/7adfa750-4c81-11e8-b3d7-01146121b73d?_g=', - true, - ], - [ - '/_dashboards/app/dashboards#/view/7adfa750-4c81-11e8-b3d7-01146121b73d?_g=', - true, - ], - [ - '/_dashboards/app/dashboards#/edit/7adfa750-4c81-11e8-b3d7-01146121b73d?_g=', - true, - ], - [ - '/app/observability-dashboards?security_tenant=private#/notebooks/NYdlPIIB0-fJ8Bh1nLdW?view=output_only', - true, - ], - [ - '/app/notebooks-dashboards?view=output_only&security_tenant=private#/M4dlPIIB0-fJ8Bh1nLc7?security_tenant=private', - true, - ], - [ - '/_dashboards/app/visualize&security_tenant=/.%2e/.%2e/.%2e/.%2e/_dashboards?#/view/id', - false, - ], - ]; - expect(urls.map((url) => isValidRelativeUrl(url[0]))).toEqual( - urls.map((url) => url[1]) - ); - }); -}); - -// TODO: merge this with other mock clients used in testing, to create some mock helpers file -const mockOpenSearchClient = (mockSavedObjectIds: string[]) => { - const client = { - callAsCurrentUser: jest - .fn() - .mockImplementation((endpoint: string, params: any) => { - switch (endpoint) { - case 'exists': - return mockSavedObjectIds.includes(params.id); - default: - fail('Fail due to unexpected function call on client'); - } - }), - }; - - return client; -}; diff --git a/dashboards-reports/server/utils/validationHelper.ts b/dashboards-reports/server/utils/validationHelper.ts deleted file mode 100644 index 2597ee4b..00000000 --- a/dashboards-reports/server/utils/validationHelper.ts +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import { RequestParams } from '@elastic/elasticsearch'; -import path from 'path'; -import { ILegacyScopedClusterClient } from '../../../../src/core/server'; -import { - reportDefinitionSchema, - ReportDefinitionSchemaType, - reportSchema, - ReportSchemaType, -} from '../../server/model'; -import { REPORT_TYPE } from '../../server/routes/utils/constants'; - -export const isValidRelativeUrl = (relativeUrl: string) => { - let normalizedRelativeUrl = relativeUrl - if ( - !relativeUrl.includes('observability#/notebooks') && - !relativeUrl.includes('notebooks-dashboards') - ) { - normalizedRelativeUrl = path.posix.normalize(relativeUrl); - } - - // check pattern - // ODFE pattern: /app/dashboards#/view/7adfa750-4c81-11e8-b3d7-01146121b73d?_g - // AES pattern: /_plugin/kibana/app/dashboards#/view/7adfa750-4c81-11e8-b3d7-01146121b73d?_g - const isValid = regexRelativeUrl.test(normalizedRelativeUrl); - return isValid; -}; - -/** - * moment.js isValid() API fails to validate time duration, so use regex - * https://github.com/moment/moment/issues/1805 - **/ -export const regexDuration = /^(-?)P(?=\d|T\d)(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)([DW]))?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/; -export const regexEmailAddress = /\S+@\S+\.\S+/; -export const regexReportName = /^[\w\-\s\(\)\[\]\,\_\-+]+$/; -export const regexRelativeUrl = /^\/(_plugin\/kibana\/|_dashboards\/)?app\/(dashboards|visualize|discover|observability-dashboards|notebooks-dashboards\?view=output_only(&security_tenant=.+)?)(\?security_tenant=.+)?#\/(notebooks\/|view\/|edit\/)?[^\/]+$/; - -export const validateReport = async ( - client: ILegacyScopedClusterClient, - report: ReportSchemaType, - basePath: String -) => { - report.query_url = report.query_url.replace(basePath, ''); - report.report_definition.report_params.core_params.base_url = report.report_definition.report_params.core_params.base_url.replace( - basePath, - '' - ); - // validate basic schema - report = reportSchema.validate(report); - // parse to retrieve data - const { - query_url: queryUrl, - report_definition: { - report_params: { report_source: reportSource }, - }, - } = report; - // Check if saved object actually exists - await validateSavedObject(client, queryUrl, reportSource); - return report; -}; - -export const validateReportDefinition = async ( - client: ILegacyScopedClusterClient, - reportDefinition: ReportDefinitionSchemaType, - basePath: String -) => { - reportDefinition.report_params.core_params.base_url = reportDefinition.report_params.core_params.base_url.replace( - basePath, - '' - ); - // validate basic schema - reportDefinition = reportDefinitionSchema.validate(reportDefinition); - // parse to retrieve data - const { - report_params: { - report_source: reportSource, - core_params: { base_url: baseUrl }, - }, - } = reportDefinition; - // Check if saved object actually exists - await validateSavedObject(client, baseUrl, reportSource); - return reportDefinition; -}; - -const validateSavedObject = async ( - client: ILegacyScopedClusterClient, - url: string, - source: REPORT_TYPE -) => { - const getId = (url: string) => { - return url - .split('/') - .pop() - ?.replace(/\?\S+$/, ''); - }; - const getType = (source: REPORT_TYPE) => { - switch (source) { - case REPORT_TYPE.dashboard: - return 'dashboard'; - case REPORT_TYPE.savedSearch: - return 'search'; - case REPORT_TYPE.visualization: - return 'visualization'; - case REPORT_TYPE.notebook: - return 'notebook'; - } - }; - - let exist = false; - let savedObjectId = ''; - if (getType(source) === 'notebook') { - // no backend check for notebooks because we would just be checking against the notebooks api again - exist = true; - } - else { - savedObjectId = `${getType(source)}:${getId(url)}`; - const params: RequestParams.Exists = { - index: '.kibana', - id: savedObjectId, - }; - exist = await client.callAsCurrentUser('exists', params); - } - if (!exist) { - throw Error(`saved object with id ${savedObjectId} does not exist`); - } -}; diff --git a/dashboards-reports/test/__mocks__/fileMock.js b/dashboards-reports/test/__mocks__/fileMock.js deleted file mode 100644 index 82cb5aa8..00000000 --- a/dashboards-reports/test/__mocks__/fileMock.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'react-mde-all'; diff --git a/dashboards-reports/test/__mocks__/loggerMock.ts b/dashboards-reports/test/__mocks__/loggerMock.ts deleted file mode 100644 index f3ae7fe0..00000000 --- a/dashboards-reports/test/__mocks__/loggerMock.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const mockLogger = { - info: jest.fn(), - trace: jest.fn(), - warn: jest.fn(), - debug: jest.fn(), - error: jest.fn(), - fatal: jest.fn(), - log: jest.fn(), - get: jest.fn(), -}; - -export { mockLogger }; diff --git a/dashboards-reports/test/__mocks__/styleMock.js b/dashboards-reports/test/__mocks__/styleMock.js deleted file mode 100644 index f053ebf7..00000000 --- a/dashboards-reports/test/__mocks__/styleMock.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = {}; diff --git a/dashboards-reports/test/httpMockClient.js b/dashboards-reports/test/httpMockClient.js deleted file mode 100644 index d1560826..00000000 --- a/dashboards-reports/test/httpMockClient.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -const httpClientMock = jest.fn(); - -httpClientMock.delete = jest.fn(() => ({ - then: jest.fn(() => ({ - catch: jest.fn(), - })), -})); -httpClientMock.get = jest.fn(() => ({ - then: jest.fn(() => ({ - then: jest.fn(() => ({ - catch: jest.fn() - })), - catch: jest.fn(), - })), - catch: jest.fn(() => ({ - then: jest.fn(() => ({ - catch: jest.fn() - })), - catch: jest.fn(), - })), -})); -httpClientMock.head = jest.fn(); -httpClientMock.post = jest.fn(() => ({ - then: jest.fn(() => ({ - catch: jest.fn(), - })), -})); -httpClientMock.put = jest.fn(() => ({ - then: jest.fn(() => ({ - catch: jest.fn(), - })), -})); - -export default httpClientMock; diff --git a/dashboards-reports/test/jest.config.js b/dashboards-reports/test/jest.config.js deleted file mode 100644 index a8756693..00000000 --- a/dashboards-reports/test/jest.config.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -//@ts-check - -process.env.TZ = 'UTC'; - -module.exports = { - rootDir: '../', - setupFiles: ['/test/setupTests.ts'], - setupFilesAfterEnv: ['/test/setup.jest.ts'], - roots: [''], - testMatch: ['**/*.test.js', '**/*.test.jsx', '**/*.test.ts', '**/*.test.tsx'], - clearMocks: true, - modulePathIgnorePatterns: ['/offline-module-cache/'], - testPathIgnorePatterns: ['/build/', '/node_modules/', '/public/components/report_definitions/delivery/'], - transformIgnorePatterns: ['/node_modules'], - moduleNameMapper: { - '\\.(css|less|sass|scss)$': '/test/__mocks__/styleMock.js', - '\\.(gif|ttf|eot|svg)$': '/test/__mocks__/fileMock.js', - }, - testEnvironment: 'jsdom', -}; diff --git a/dashboards-reports/test/propsMock.js b/dashboards-reports/test/propsMock.js deleted file mode 100644 index 4c16a766..00000000 --- a/dashboards-reports/test/propsMock.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - - const propsMock = { - match: { - params: { - reportId: jest.fn(), - } - } - }; - export default propsMock; diff --git a/dashboards-reports/test/setup.jest.ts b/dashboards-reports/test/setup.jest.ts deleted file mode 100644 index 703f5091..00000000 --- a/dashboards-reports/test/setup.jest.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -import '@testing-library/jest-dom/extend-expect'; -import { configure } from '@testing-library/react'; - -configure({ testIdAttribute: 'data-test-subj' }); - -jest.mock('@elastic/eui/lib/components/form/form_row/make_id', () => () => - 'random-id' -); - -jest.mock('@elastic/eui/lib/services/accessibility/html_id_generator', () => ({ - htmlIdGenerator: () => { - return () => 'random_html_id'; - }, -})); diff --git a/dashboards-reports/test/setupTests.ts b/dashboards-reports/test/setupTests.ts deleted file mode 100644 index 5a996f6f..00000000 --- a/dashboards-reports/test/setupTests.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -require('babel-polyfill'); -require('core-js/stable'); diff --git a/dashboards-reports/translations/pl.json b/dashboards-reports/translations/pl.json deleted file mode 100644 index f2d770f0..00000000 --- a/dashboards-reports/translations/pl.json +++ /dev/null @@ -1,299 +0,0 @@ -{ - "formats": { - "number": { - "currency": { - "style": "currency" - }, - "percent": { - "style": "percent" - } - }, - "date": { - "short": { - "month": "numeric", - "day": "numeric", - "year": "2-digit" - }, - "medium": { - "month": "short", - "day": "numeric", - "year": "numeric" - }, - "long": { - "month": "long", - "day": "numeric", - "year": "numeric" - }, - "full": { - "weekday": "long", - "month": "long", - "day": "numeric", - "year": "numeric" - } - }, - "time": { - "short": { - "hour": "numeric", - "minute": "numeric" - }, - "medium": { - "hour": "numeric", - "minute": "numeric", - "second": "numeric" - }, - "long": { - "hour": "numeric", - "minute": "numeric", - "second": "numeric", - "timeZoneName": "short" - }, - "full": { - "hour": "numeric", - "minute": "numeric", - "second": "numeric", - "timeZoneName": "short" - } - }, - "relative": { - "years": { - "units": "year" - }, - "months": { - "units": "month" - }, - "days": { - "units": "day" - }, - "hours": { - "units": "hour" - }, - "minutes": { - "units": "minute" - }, - "seconds": { - "units": "second" - } - } - }, - "messages": { - "opensearch.reports.app.createReport": "Utwórz Raport", - "opensearch.reports.app.editReportDefinition": "Zmień Definicję Raportu", - "opensearch.reports.app.reportDefinitionDetails": "Szczegóły Definicji Raportu", - "opensearch.reports.app.reportDetails": "Szczegóły Raportu", - "opensearch.reports.app.reportingHomepage": "Centrum Raportów", - "opensearch.reports.categoryName": "OpenSearch", - "opensearch.reports.createReportDefinition.breadcrumb.UtwórzReportDefinition": "Utwórz Definicję Raportu", - "opensearch.reports.createReportDefinition.breadcrumb.reporting": "Raporty", - "opensearch.reports.createReportDefinition.cancel": "Anuluj", - "opensearch.reports.createReportDefinition.create": "Utwórz", - "opensearch.reports.createReportDefinition.error.errorCreating": "Błąd tworzenia definicji raportu.", - "opensearch.reports.createReportDefinition.error.fieldsHaveAnError": "Któreś pole jest błędnie wypełnione.", - "opensearch.reports.createReportDefinition.error.invalidTimeRange": "Nieprawidłowy zakres czasu.", - "opensearch.reports.createReportDefinition.title": "Utwórz definicję raportu", - "opensearch.reports.details.breadcrumb.reportDetails": "Szczegóły Raportu: {name}", - "opensearch.reports.details.breadcrumb.reporting": "Raporty", - "opensearch.reports.details.errorLoadingReportDetails": "Błąd przy wczytywaniu szczegółów Raportu", - "opensearch.reports.details.reportSettings": "Ustawienia Raportu", - "opensearch.reports.details.reportSettings.created": "Utworzono", - "opensearch.reports.details.reportSettings.description": "Opis", - "opensearch.reports.details.reportSettings.fileFormat": "Format pliku", - "opensearch.reports.details.reportSettings.lastUpdated": "Ostatnia aktualizacja", - "opensearch.reports.details.reportSettings.name": "Nazwa", - "opensearch.reports.details.reportSettings.reportFooter": "Stopka", - "opensearch.reports.details.reportSettings.reportHeader": "Nagłówek", - "opensearch.reports.details.reportSettings.source": "Źródło", - "opensearch.reports.details.reportSettings.state": "Stan", - "opensearch.reports.details.reportSettings.timePeriod": "Okres", - "opensearch.reports.details.reportSuccessfullyDownloaded": "Raport pomyślnie pobrany!", - "opensearch.reports.details.reportTrigger": "Wyzwalacz Raportu", - "opensearch.reports.details.reportTrigger.reportType": "Typ raportu", - "opensearch.reports.details.reportTrigger.scheduleDetails": "Zaplanuj harmonogram", - "opensearch.reports.details.reportTrigger.scheduleType": "Typ harmonogramu", - "opensearch.reports.details.title": "Szczegóły Raportu", - "opensearch.reports.editReportDefinition.cancel": "Anuluj", - "opensearch.reports.editReportDefinition.errorDeleting": "Błąd usuwania starego zaplanowanego definicji raportu.", - "opensearch.reports.editReportDefinition.errorLoading": "Błąd ładowania wartości definicji raportu.", - "opensearch.reports.editReportDefinition.errorUpdating": "Błąd aktualizacji definicji raportu.", - "opensearch.reports.editReportDefinition.fieldsHaveAnError": "Któreś pole jest błędnie wypełnione.", - "opensearch.reports.editReportDefinition.save": "Zapisz zmiany", - "opensearch.reports.editReportDefinition.title": "Edytuj definicję raportu.", - "opensearch.reports.error.channelListCannotBeEmpty": "Lista kanałów nie może być pusta.", - "opensearch.reports.error.deliverySubjectCannotBeEmpty": "Temat nie może być pusty.", - "opensearch.reports.error.deliveryTextCannotBeEmpty": "Tekst dostawy nie może być pusty", - "opensearch.reports.error.reportSourceMustNotBeEmpty": "Źródło raportu nie może być puste.", - "opensearch.reports.loading.close": "Zamknij", - "opensearch.reports.loading.generatingReport": "Generowanie raportu.", - "opensearch.reports.loading.preparingYourFile": "Przygotowanie pliku do pobrania.", - "opensearch.reports.loading.youCanClose": "Nie zamykaj tego okna dialogowego podczas generowania raportu.", - "opensearch.reports.main.errorDownloadingReport": "Błąd przy pobieraniu raportu", - "opensearch.reports.main.errorGeneratingReportDefinitionsTable.": "Błąd generowania listy definicji raportów.", - "opensearch.reports.main.errorGeneratingReportsTable.": "Błąd generowania listy raportów.", - "opensearch.reports.main.reportDefinitions.button.create": "Utwórz", - "opensearch.reports.main.reportDefinitions.button.refresh": "Odśwież", - "opensearch.reports.main.reports.button.refresh": "Odśwież", - "opensearch.reports.main.successfullyCreatedReportDefinition": "Pomyślnie utworzono definicję raportu.", - "opensearch.reports.main.successfullyDeletedReportDefinition": "Pomyślnie usunięto definicję raportu.", - "opensearch.reports.main.successfullyDownloadedReport": "Pomyślnie pobrano raport.", - "opensearch.reports.main.successfullyUpdatedReportDefinition": "Pomyślnie zaktualizowano definicję raportu.", - "opensearch.reports.main.title.reportDefinitions": "Definicje raportu", - "opensearch.reports.main.title.reporting": "Raporty", - "opensearch.reports.main.title.reports": "Raporty", - "opensearch.reports.menu.button.reports": "Raporty", - "opensearch.reports.menu.createReportDefinition": "Utwórz definicję raportu", - "opensearch.reports.menu.csv.generateCsv": "Wygeneruj CSV", - "opensearch.reports.menu.csv.generateReport": "Wygeneruj i pobierz", - "opensearch.reports.menu.csv.savePrompt": "Zapisz to wyszukiwanie, aby włączyć raporty CSV.", - "opensearch.reports.menu.csv.view": "Widok", - "opensearch.reports.menu.csv.viewReports": "Zobacz raporty", - "opensearch.reports.menu.csv.waitPrompt": "Generowanie może chwilę trwać, w zależności od rozmiaru danych źródłowych.", - "opensearch.reports.menu.downloadError": "Błąd pobierania", - "opensearch.reports.menu.errorGeneratingReport": "Błąd generowania raportu", - "opensearch.reports.menu.errorGeneratingThisReport": "Wystąpił błąd podczas generowania tego raportu.", - "opensearch.reports.menu.insufficientPermissions": "Niewystarczające uprawnienia. Skontaktuj się z administratorem Kibany.", - "opensearch.reports.menu.name": "Raporty", - "opensearch.reports.menu.newNotificationAppears": "Pojawiło się nowe powiadomienie", - "opensearch.reports.menu.progress.generatingReport": "Generowanie raportu", - "opensearch.reports.menu.progress.preparingYourFile": "Przygotowanie pliku do pobrania", - "opensearch.reports.menu.progress.youCanClose": "Nie zamykaj tego okna dialogowego podczas generowania raportu.", - "opensearch.reports.menu.scheduleAndShare": "Wygeneruj i udostępnij", - "opensearch.reports.menu.successfullyGenerated": "Pomyślnie wygenerowano raport.", - "opensearch.reports.menu.visual.createReportDefinition": "Utwórz definicję raportu.", - "opensearch.reports.menu.visual.downloadPdf": "Pobierz PDF", - "opensearch.reports.menu.visual.downloadPng": "Pobierz PNG.", - "opensearch.reports.menu.visual.generateReport": "Generuj raport", - "opensearch.reports.menu.visual.savePrompt": "Zapisz tę wizualizację, aby włączyć raporty PDF / PNG.", - "opensearch.reports.menu.visual.scheduleAndShare": "Wygeneruj i udostępnij", - "opensearch.reports.menu.visual.view": "Widok", - "opensearch.reports.menu.visual.viewReports": "Przeglądaj raporty", - "opensearch.reports.menu.visual.waitPrompt": "Generowanie może chwilę trwać, w zależności od rozmiaru danych źródłowych.", - "opensearch.reports.pluginName": "Raporty", - "opensearch.reports.reportDefinitionsDetails.button.delete.cancel": "Anuluj", - "opensearch.reports.reportDefinitionsDetails.button.delete.confirm": "Usuń", - "opensearch.reports.reportDefinitionsDetails.button.delete.query": "Czy na pewno chcesz usunąć \"{Name}\"?", - "opensearch.reports.reportDefinitionsDetails.button.delete.title": "Usuń definicję raportu.", - "opensearch.reports.reportDefinitionsDetails.deleteReportDefinitionButton": "Usuń", - "opensearch.reports.reportDefinitionsDetails.editReportDefinitionButton": "Zmień", - "opensearch.reports.reportDefinitionsDetails.fields.created": "Utworzony", - "opensearch.reports.reportDefinitionsDetails.fields.description": "Opis", - "opensearch.reports.reportDefinitionsDetails.fields.fileFormat": "Format pliku", - "opensearch.reports.reportDefinitionsDetails.fields.lastUpdated": "Ostatnio zaktualizowany", - "opensearch.reports.reportDefinitionsDetails.fields.name": "Nazwa", - "opensearch.reports.reportDefinitionsDetails.fields.reportFooter": "Stopka", - "opensearch.reports.reportDefinitionsDetails.fields.reportHeader": "Nagłówek", - "opensearch.reports.reportDefinitionsDetails.fields.reportTrigger": "Wyzwalacz Raportu", - "opensearch.reports.reportDefinitionsDetails.fields.source": "Źródło", - "opensearch.reports.reportDefinitionsDetails.fields.timePeriod": "Okres", - "opensearch.reports.reportDefinitionsDetails.reportSettings": "Ustawienia raportu.", - "opensearch.reports.reportDefinitionsDetails.schedule.breadcrumb.error": "Błąd podczas pobierania szczegółów definicji raportu: {Błąd}", - "opensearch.reports.reportDefinitionsDetails.schedule.breadcrumb.reportDefinitionDetails": "Szczegóły Definicji Reportu: {Name}", - "opensearch.reports.reportDefinitionsDetails.schedule.breadcrumb.reporting": "Raporty", - "opensearch.reports.reportDefinitionsDetails.schedule.byInterval": "Okresowo, co {okres} {jednostka}, zaczynając od {czas}", - "opensearch.reports.reportDefinitionsDetails.schedule.cronBased": "Oparte na Cron: {Expression} ({TimeZone})", - "opensearch.reports.reportDefinitionsDetails.schedule.dailyAt": "Codziennie o {czas}", - "opensearch.reports.reportDefinitionsDetails.schedule.triggerSection.scheduleDetails": "Szczegóły harmonogramu", - "opensearch.reports.reportDefinitionsDetails.schedule.triggerSection.status": "Stan", - "opensearch.reports.reportDefinitionsDetails.schedule.triggerSection.triggerType": "Typ wyzwalania", - "opensearch.reports.reportDefinitionsDetails.title": "Szczegóły Definicji Raportu", - "opensearch.reports.reportDefinitionsDetails.toast.errorDeletingReport definition. ": "Błąd usuwania definicji raportu", - "opensearch.reports.reportDefinitionsDetails.toast.errorDisablingSchedule. ": "Błąd podczas wyłączania harmonogramu", - "opensearch.reports.reportDefinitionsDetails.toast.errorEnablingSchedule. ": "Błąd podczas włączania harmonogramu.", - "opensearch.reports.reportDefinitionsDetails.toast.errorGeneratingReport. ": "Błąd generowania raportu", - "opensearch.reports.reportDefinitionsDetails.toast.errorLoadingReportDefinitionDetails. ": "Błąd podczas wczytywania definicji raportu", - "opensearch.reports.reportDefinitionsDetails.toast.successfullyDisabledSchedule. ": "Pomyślnie wyłączono harmonogram.", - "opensearch.reports.reportDefinitionsDetails.toast.successfullyEnabledSchedule. ": "Pomyślnie włączono harmonogram.", - "opensearch.reports.reportDefinitionsDetails.toast.successfullyGeneratedReport. ": "Pomyślnie wygenerowano raport.", - "opensearch.reports.reportDefinitionsTable.columns.lastUpdated": "Ostatnia aktualizacja", - "opensearch.reports.reportDefinitionsTable.columns.name": "Nazwa", - "opensearch.reports.reportDefinitionsTable.columns.scheduleDetails": "Szczegóły harmonogramu", - "opensearch.reports.reportDefinitionsTable.columns.source": "Źródło", - "opensearch.reports.reportDefinitionsTable.columns.status": "Stan", - "opensearch.reports.reportDefinitionsTable.columns.type": "Rodzaj", - "opensearch.reports.reportDefinitionsTable.emptyMessageReports.createANewDefinition": "Aby rozpocząć, utwórz definicję raportu", - "opensearch.reports.reportDefinitionsTable.emptyMessageReports.createReportDefinition": "Utwórz definicję raportu.", - "opensearch.reports.reportDefinitionsTable.emptyMessageReports.getStarted": "Zacznij pracę z Reportami w Kibanie", - "opensearch.reports.reportDefinitionsTable.emptyMessageReports.noDefinitionsFound": "Żadna definicja raportu nie pasuje do kryteriów wyszukiwania.", - "opensearch.reports.reportDefinitionsTable.emptyMessageReports.noReportDefinitions": "Brak definicji raportu do wyświetlenia", - "opensearch.reports.reportDefinitionsTable.emptyMessageReports.toLearnMore": "Aby dowiedzieć się więcej, zobacz", - "opensearch.reports.reportSettingProps.fileFormat": "Format pliku", - "opensearch.reports.reportSettingProps.footer": "Stopka", - "opensearch.reports.reportSettingProps.form.description": "Opis (opcjonalny)", - "opensearch.reports.reportSettingProps.form.fileFormat": "Format pliku", - "opensearch.reports.reportSettingProps.form.help.name": "Dozwolone znaki to A-Z, A-Z, 0-9, (), [], _ (podkreślenie), - (łącznik) i (przestrzeń).", - "opensearch.reports.reportSettingProps.form.name": "Nazwa", - "opensearch.reports.reportSettingProps.form.placeholder.description": "Opisz ten raport (np. raport tygodniowy)", - "opensearch.reports.reportSettingProps.form.placeholder.reportName": "Nazwa raportu", - "opensearch.reports.reportSettingProps.form.placeholder.selectASavedSearch": "Wybierz zapisane wyszukiwanie", - "opensearch.reports.reportSettingProps.form.placeholder.selectAVisualization": "Wybierz wizualizację", - "opensearch.reports.reportSettingProps.form.reportSettings": "Ustawienia raportu.", - "opensearch.reports.reportSettingProps.form.reportSource": "Źródło raportu.", - "opensearch.reports.reportSettingProps.form.selectSavedSearch": "Wybierz Zapisane wyszukiwanie", - "opensearch.reports.reportSettingProps.form.selectVisualization": "Wybierz wizualizację", - "opensearch.reports.reportSettingProps.header": "nagłówek", - "opensearch.reports.reportSettingProps.headerAndFooter": "Nagłówek i stopka", - "opensearch.reports.reportSettingProps.placeholder.selectDashboard": "Wybierz pulpit", - "opensearch.reports.reportSettingProps.selectDashboard": "Wybierz pulpit.", - "opensearch.reports.reportsTable.emptyMessageReports.createAReportDefinition": "Utwórz definicję raportu lub udostępnij / pobierz raport z pulpitu nawigacyjnego, zapisane wyszukiwanie lub wizualizację.", - "opensearch.reports.reportsTable.emptyMessageReports.getStarted": "Zacznij od raportowania Kibany", - "opensearch.reports.reportsTable.emptyMessageReports.noReportsToDisplay": "Brak raportów do wyświetlenia", - "opensearch.reports.reportsTable.emptyMessageReports.toLearnMore": "Aby dowiedzieć się więcej, zobacz", - "opensearch.reports.reportsTable.reportsListSearch.noRreportsMatch": "Żaden raport nie pasuje nie pasuje do kryteriów wyszukiwania.", - "opensearch.reports.reportsTable.reportsListSearch.State": "Stan", - "opensearch.reports.reportsTable.reportsListSearch.Type": "Rodzaj", - "opensearch.reports.reportsTable.reportsTableColumns.creationTime": "Czas utworzenia", - "opensearch.reports.reportsTable.reportsTableColumns.Generate": "Wygeneruj", - "opensearch.reports.reportsTable.reportsTableColumns.Name": "Nazwa", - "opensearch.reports.reportsTable.reportsTableColumns.Source": "Źródło", - "opensearch.reports.reportsTable.reportsTableColumns.State": "Stan", - "opensearch.reports.reportsTable.reportsTableColumns.Type": "Rodzaj", - "opensearch.reports.reportTrigger.cron.customCronExpression": "Niestandardowe wyrażenie Cron.", - "opensearch.reports.reportTrigger.cron.placeholder.formula": "np. 0 12 * * * (Uruchamia o 12:00 każdego dnia)", - "opensearch.reports.reportTrigger.form.requestTime": "czas oczekiwania", - "opensearch.reports.reportTrigger.form.triggerType": "Typ wyzwalania", - "opensearch.reports.reportTrigger.monthly.onThe": "na", - "opensearch.reports.reportTrigger.monthly.placeholder.dayOfMonth": "Dzień miesiąca", - "opensearch.reports.reportTrigger.recurring.every": "każdy", - "opensearch.reports.reportTrigger.recurring.intervalMustBeANumber": "Interwał musi być liczbą.", - "opensearch.reports.reportTrigger.recurring.placeholder.mustBeANumber": "Musi być liczbą", - "opensearch.reports.reportTrigger.recurring.startTime": "czas rozpoczęcia", - "opensearch.reports.reportTrigger.schedule.requestTime": "czas oczekiwania", - "opensearch.reports.reportTrigger.scheduleTrigger.requestTime": "czas oczekiwania", - "opensearch.reports.reportTrigger.scheduleTriggerRecurring.frequency": "częstotliwość", - "opensearch.reports.reportTrigger.timezone": "Strefa czasowa", - "opensearch.reports.reportTrigger.title.reportTrigger": "Raport Wyzwalacz.", - "opensearch.reports.reportTrigger.weekly.every": "każdy", - "opensearch.reports.reportTriggerConstants.intervalTimePeriods.days": "Dni", - "opensearch.reports.reportTriggerConstants.intervalTimePeriods.hours": "godziny", - "opensearch.reports.reportTriggerConstants.intervalTimePeriods.minutes": "Minuty", - "opensearch.reports.reportTriggerConstants.monthlyOnTheOptions.day": "Dzień", - "opensearch.reports.reportTriggerConstants.scheduleRecurringOptions.byInterval": "Przez interwał", - "opensearch.reports.reportTriggerConstants.scheduleRecurringOptions.daily": "Codziennie", - "opensearch.reports.reportTriggerConstants.scheduleTypeOptions.cronBased": "Oparty na Cron.", - "opensearch.reports.reportTriggerConstants.scheduleTypeOptions.recurring": "Powtarzające się", - "opensearch.reports.reportTriggerConstants.triggerTypeOptions.onDemand": "Na żądanie", - "opensearch.reports.reportTriggerConstants.triggerTypeOptions.schedule": "Harmonogram", - "opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.fri": "Pt", - "opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.mon": "Pon", - "opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.sat": "Sob", - "opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.sun": "Nie", - "opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.thu": "Wt", - "opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.tue": "Czw", - "opensearch.reports.reportTriggerConstants.weeklyCheckboxOptions.wed": "Sr", - "opensearch.reports.settings.constants.commonTimeRanges.monthToDate": "Do tej pory w miesiącu", - "opensearch.reports.settings.constants.commonTimeRanges.todaySoFar": "Do tej pory dzisiaj", - "opensearch.reports.settings.constants.commonTimeRanges.weekToDate": "Od początku tygodnia", - "opensearch.reports.settings.constants.commonTimeRanges.yearToDate": "Rok do tej pory", - "opensearch.reports.settings.constants.headerFooterCheckbox.addFooter": "Dodaj stopkę", - "opensearch.reports.settings.constants.headerFooterCheckbox.addHeader": "Dodaj nagłówek", - "opensearch.reports.settings.constants.reportSourceRadios.dashboard": "Pulpit", - "opensearch.reports.settings.constants.reportSourceRadios.savedSearch": "Zapisane wyszukiwanie", - "opensearch.reports.settings.constants.reportSourceRadios.visualization": "Wizualizacja", - "opensearch.reports.timeRange.help.timeRange": "Zakres czasu jest w stosunku do daty tworzenia raportu na wyzwalaniu raportu.", - "opensearch.reports.timeRange.invalidTimeRange": "Wybrano nieprawidłowy zakres czasu", - "opensearch.reports.timeRange.label.timeRange": "Zakres czasu", - "opensearch.reports.utils.errorTitle": "Błąd generowania raportu.", - "opensearch.reports.utils.errorText": { - "text": "Zbyt długo trwa generowanie raportu ID {reportId}. Spróbuj później.", - "comment": "Error number toast" - } - } -} diff --git a/dashboards-reports/translations/zh-CN.json b/dashboards-reports/translations/zh-CN.json deleted file mode 100644 index 25e95ca7..00000000 --- a/dashboards-reports/translations/zh-CN.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "formats": { - "number": { - "currency": { - "style": "currency" - }, - "percent": { - "style": "percent" - } - }, - "date": { - "short": { - "month": "numeric", - "day": "numeric", - "year": "2-digit" - }, - "medium": { - "month": "short", - "day": "numeric", - "year": "numeric" - }, - "long": { - "month": "long", - "day": "numeric", - "year": "numeric" - }, - "full": { - "weekday": "long", - "month": "long", - "day": "numeric", - "year": "numeric" - } - }, - "time": { - "short": { - "hour": "numeric", - "minute": "numeric" - }, - "medium": { - "hour": "numeric", - "minute": "numeric", - "second": "numeric" - }, - "long": { - "hour": "numeric", - "minute": "numeric", - "second": "numeric", - "timeZoneName": "short" - }, - "full": { - "hour": "numeric", - "minute": "numeric", - "second": "numeric", - "timeZoneName": "short" - } - }, - "relative": { - "years": { - "units": "year" - }, - "months": { - "units": "month" - }, - "days": { - "units": "day" - }, - "hours": { - "units": "hour" - }, - "minutes": { - "units": "minute" - }, - "seconds": { - "units": "second" - } - } - }, - "messages": { - } -} diff --git a/dashboards-reports/tsconfig.json b/dashboards-reports/tsconfig.json deleted file mode 100644 index 58c31ede..00000000 --- a/dashboards-reports/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - // extend OpenSearch Dashboards's tsconfig, or use your own settings - "extends": "../../tsconfig.json", - "compilerOptions": { - "jsx": "react", - "allowJs": true, - "baseUrl": ".", - "target": "esnext", - "module": "commonjs", - "outDir": "./target", - "noEmit": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "allowUnusedLabels": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "alwaysStrict": false, - "noImplicitUseStrict": false, - "types": ["jest", "node"] - }, - "include": [ - "test/**/*", - "index.ts", - "public/**/*.ts", - "public/**/*.tsx", - "server/**/*.ts", - "common/**/*.ts", - "../../typings/**/*" - ], - "exclude": ["node_modules", "*/node_modules/"] -} diff --git a/dashboards-reports/yarn.lock b/dashboards-reports/yarn.lock deleted file mode 100644 index 1974c64d..00000000 --- a/dashboards-reports/yarn.lock +++ /dev/null @@ -1,7052 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" - integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/compat-data@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" - integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== - -"@babel/core@^7.1.0": - version "7.12.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" - integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.1" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.1" - "@babel/parser" "^7.12.3" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.12.3": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" - integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.7" - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helpers" "^7.17.8" - "@babel/parser" "^7.17.8" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - -"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" - integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== - dependencies: - "@babel/types" "^7.12.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.17.3", "@babel/generator@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" - integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== - dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-compilation-targets@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" - integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-member-expression-to-functions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c" - integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-module-imports@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-module-imports@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" - integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== - dependencies: - "@babel/types" "^7.12.5" - -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" - integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== - dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-simple-access" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/helper-validator-identifier" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" - lodash "^4.17.19" - -"@babel/helper-module-transforms@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" - integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-replace-supers@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" - integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.1" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" - -"@babel/helper-simple-access@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" - integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-simple-access@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" - integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helpers@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" - integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" - -"@babel/helpers@^7.17.8": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.8.tgz#288450be8c6ac7e4e44df37bcc53d345e07bc106" - integrity sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0" - integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ== - -"@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.8": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" - integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" - integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" - integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/runtime@7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.0.tgz#49dcbcd637099a55d3a61e590a00d6861393b1b5" - integrity sha512-2xsuyZ0R0RBFwjgae5NpXk8FcfH4qovj5cEM5VEeB7KXnKqzaisIu2HSV/mCEISolJJuR4wkViUGYujA8MH9tw== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" - integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.12.13": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" - integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" - integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/template@^7.10.4", "@babel/template@^7.3.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.5.tgz#78a0c68c8e8a35e4cacfd31db8bb303d5606f095" - integrity sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.12.5" - "@babel/types" "^7.12.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/traverse@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" - integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" - "@babel/types" "^7.17.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.12.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.6.tgz#ae0e55ef1cce1fbc881cd26f8234eb3e657edc96" - integrity sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@babel/types@^7.10.4": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" - integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@babel/types@^7.16.7", "@babel/types@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@cypress/listr-verbose-renderer@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" - integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= - dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" - date-fns "^1.27.2" - figures "^1.7.0" - -"@cypress/request@^2.88.5": - version "2.88.5" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.5.tgz#8d7ecd17b53a849cfd5ab06d5abe7d84976375d7" - integrity sha512-TzEC1XMi1hJkywWpRfD2clreTa/Z+lOrXDCxxBTBPEcY5azdPi56A6Xw+O4tWJnaJH3iIE7G5aDXZC6JgRZLcA== - 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" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.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" - -"@elastic/eslint-import-resolver-kibana@link:../../packages/osd-eslint-import-resolver-opensearch-dashboards": - version "0.0.0" - uid "" - -"@emotion/cache@^10.0.27": - version "10.0.29" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" - integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== - dependencies: - "@emotion/sheet" "0.9.4" - "@emotion/stylis" "0.8.5" - "@emotion/utils" "0.11.3" - "@emotion/weak-memoize" "0.2.5" - -"@emotion/core@^10.0.14": - version "10.0.35" - resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.35.tgz#513fcf2e22cd4dfe9d3894ed138c9d7a859af9b3" - integrity sha512-sH++vJCdk025fBlRZSAhkRlSUoqSqgCzYf5fMOmqqi3bM6how+sQpg3hkgJonj8GxXM4WbD7dRO+4tegDB9fUw== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/cache" "^10.0.27" - "@emotion/css" "^10.0.27" - "@emotion/serialize" "^0.11.15" - "@emotion/sheet" "0.9.4" - "@emotion/utils" "0.11.3" - -"@emotion/css@^10.0.27": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" - integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== - dependencies: - "@emotion/serialize" "^0.11.15" - "@emotion/utils" "0.11.3" - babel-plugin-emotion "^10.0.27" - -"@emotion/hash@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== - -"@emotion/memoize@0.7.4": - version "0.7.4" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" - integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== - -"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": - version "0.11.16" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" - integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg== - dependencies: - "@emotion/hash" "0.8.0" - "@emotion/memoize" "0.7.4" - "@emotion/unitless" "0.7.5" - "@emotion/utils" "0.11.3" - csstype "^2.5.7" - -"@emotion/sheet@0.9.4": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" - integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== - -"@emotion/stylis@0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" - integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== - -"@emotion/unitless@0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" - integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== - -"@emotion/utils@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" - integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== - -"@emotion/weak-memoize@0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" - integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== - -"@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" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== - -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - -"@jest/types@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.3.0.tgz#97627bf4bdb72c55346eef98e3b3f7ddc4941f71" - integrity sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" - integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.11" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" - integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== - -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@react-navigation/core@^3.7.7": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-3.7.7.tgz#398b23836928f96d23eb60a10f8be77b160f1284" - integrity sha512-0EYy7Hyip42Fua71w+Hti39u9tKzyNjdHZSWahWoZOZnEIgFwHmW3oT4A18Xv2l/rC2LOyfiddhp/Y1GIrV/3g== - dependencies: - hoist-non-react-statics "^3.3.2" - path-to-regexp "^1.8.0" - query-string "^6.13.1" - react-is "^16.13.0" - -"@react-navigation/native@^3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-3.8.1.tgz#c3b13468a4729b0c60d2be9383e21a6860e020c4" - integrity sha512-EUOV7Ac09iMqphKidpLGnzn7pJr+XmDxJc4bGEKtMH/m/EpJYN93llzu9aPJxDJymMQsc/tyPIjJw2vKFcfNFQ== - dependencies: - hoist-non-react-statics "^3.3.2" - react-native-safe-area-view "^0.14.9" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" - integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== - dependencies: - any-observable "^0.3.0" - -"@types/babel__core@^7.0.0": - version "7.1.12" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__core@^7.1.14": - version "7.1.19" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" - integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" - integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" - integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A== - dependencies: - "@babel/types" "^7.3.0" - -"@types/cheerio@*": - version "0.22.22" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.22.tgz#ae71cf4ca59b8bbaf34c99af7a5d6c8894988f5f" - integrity sha512-05DYX4zU96IBfZFY+t3Mh88nlwSMtmmzSYaQkKN48T495VV1dkHSah6qYyDTN5ngaS0i0VonH37m+RuzSM0YiA== - dependencies: - "@types/node" "*" - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/dompurify@^2.3.3": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.3.3.tgz#c24c92f698f77ed9cc9d9fa7888f90cf2bfaa23f" - integrity sha512-nnVQSgRVuZ/843oAfhA25eRSNzUFcBPk/LOiw5gm8mD9/X7CNcbRkQu/OsjCewO8+VIYfPxUnXvPEVGenw14+w== - dependencies: - "@types/trusted-types" "*" - -"@types/enzyme-adapter-react-16@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.6.tgz#8aca7ae2fd6c7137d869b6616e696d21bb8b0cec" - integrity sha512-VonDkZ15jzqDWL8mPFIQnnLtjwebuL9YnDkqeCDYnB4IVgwUm0mwKkqhrxLL6mb05xm7qqa3IE95m8CZE9imCg== - dependencies: - "@types/enzyme" "*" - -"@types/enzyme@*": - version "3.10.8" - resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.8.tgz#ad7ac9d3af3de6fd0673773123fafbc63db50d42" - integrity sha512-vlOuzqsTHxog6PV79+tvOHFb6hq4QZKMq1lLD9MaWD1oec2lHTKndn76XOpSwCA0oFTaIbKVPrgM3k78Jjd16g== - dependencies: - "@types/cheerio" "*" - "@types/react" "*" - -"@types/graceful-fs@^4.1.2": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" - integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" - integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@26.x": - version "26.0.13" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.13.tgz#5a7b9d5312f5dd521a38329c38ee9d3802a0b85e" - integrity sha512-sCzjKow4z9LILc6DhBvn5AkIfmQzDZkgtVVKmGwVrs5tuid38ws281D4l+7x1kP487+FlKDh5kfMZ8WSPAdmdA== - dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" - -"@types/jsdom@^16.2.3": - version "16.2.5" - resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-16.2.5.tgz#74ebad438741d249ecb416c5486dcde4217eb66c" - integrity sha512-k/ZaTXtReAjwWu0clU0KLS53dyqZnA8mm+jwKFeFrvufXgICp+VNbskETFxKKAguv0pkaEKTax5MaRmvalM+TA== - dependencies: - "@types/node" "*" - "@types/parse5" "*" - "@types/tough-cookie" "*" - -"@types/node@*": - version "14.6.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.3.tgz#cc4f979548ca4d8e7b90bc0180052ab99ee64224" - integrity sha512-pC/hkcREG6YfDfui1FBmj8e20jFU5Exjw4NYDm8kEdrW+mOh0T1Zve8DWKnS7ZIZvgncrctcNCXF4Q2I+loyww== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/parse5@*": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" - integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== - -"@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/raf@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.0.tgz#2b72cbd55405e071f1c4d29992638e022b20acc2" - integrity sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw== - -"@types/react-addons-test-utils@^0.14.25": - version "0.14.25" - resolved "https://registry.yarnpkg.com/@types/react-addons-test-utils/-/react-addons-test-utils-0.14.25.tgz#09cf7f7128d497d23d6e73da5a09406a74438c2b" - integrity sha512-Z3FdgnPHwjqj3DO2OyyXkiEHCTmuwio5ENVafw9MvGQWWs1lQsbasTXO9deZDGKCtqpP8h7oFBil9Ovs08xWnw== - dependencies: - "@types/react" "*" - -"@types/react-dom@^16.9.8": - version "16.9.8" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" - integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== - dependencies: - "@types/react" "*" - -"@types/react-test-renderer@^16.9.1": - version "16.9.3" - resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.3.tgz#96bab1860904366f4e848b739ba0e2f67bcae87e" - integrity sha512-wJ7IlN5NI82XMLOyHSa+cNN4Z0I+8/YaLl04uDgcZ+W+ExWCmCiVTLT/7fRNqzy4OhStZcUwIqLNF7q+AdW43Q== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "16.9.49" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872" - integrity sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/react@^16.14.23": - version "16.14.24" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.24.tgz#f2c5e9fa78f83f769884b83defcf7924b9eb5c82" - integrity sha512-e7U2WC8XQP/xfR7bwhOhNFZKPTfW1ph+MiqtudKb8tSV8RyCsovQx2sNVtKoOryjxFKpHPPC/yNiGfdeVM5Gyw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - -"@types/set-interval-async@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/set-interval-async/-/set-interval-async-1.0.0.tgz#7769973e0ded3faee36018795a92b6ba239d668e" - integrity sha512-4twO6B7/dcd+lMyIHwUm/S1RMvVOsgZf0sCevNNCnwyAxn7t9mxLfuZxIGFimYCPhLjJYccsvo4HhXxp4UDoBg== - -"@types/showdown@^1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-1.9.3.tgz#eaa881b03a32d3720184731754d3025fc450b970" - integrity sha512-akvzSmrvY4J5d3tHzUUiQr0xpjd4Nb3uzWW6dtwzYJ+qW/KdWw5F8NLatnor5q/1LURHnzDA1ReEwCVqcatRnw== - -"@types/sinonjs__fake-timers@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae" - integrity sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg== - -"@types/sizzle@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" - integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== - -"@types/tough-cookie@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.0.tgz#fef1904e4668b6e5ecee60c52cc6a078ffa6697d" - integrity sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A== - -"@types/trusted-types@*": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-1.0.6.tgz#569b8a08121d3203398290d602d84d73c8dcf5da" - integrity sha512-230RC8sFeHoT6sSUlRO6a8cAnclO06eeiq1QDfiv2FGCLWFvvERWgwIQD4FWqD9A69BN7Lzee4OXwoMVnnsWDw== - -"@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== - -"@types/yargs@^15.0.0": - version "15.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" - integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== - dependencies: - "@types/yargs-parser" "*" - -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.0.5: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - -airbnb-prop-types@^2.16.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz#b96274cefa1abb14f623f804173ee97c13971dc2" - integrity sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg== - dependencies: - array.prototype.find "^2.1.1" - function.prototype.name "^1.1.2" - is-regex "^1.1.0" - object-is "^1.1.2" - object.assign "^4.1.0" - object.entries "^1.1.2" - prop-types "^15.7.2" - prop-types-exact "^1.2.0" - react-is "^16.13.1" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-regex@5.0.1, ansi-regex@^2.0.0, ansi-regex@^3.0.0, ansi-regex@^4.1.0, ansi-regex@^5.0.0, ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -arch@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-find@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" - integrity sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.find@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.1.tgz#3baca26108ca7affb08db06bf0be6cb3115a969c" - integrity sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.4" - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - 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 sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async@^3.2.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" - integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -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== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== - dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-emotion@^10.0.27: - version "10.0.33" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz#ce1155dcd1783bbb9286051efee53f4e2be63e03" - integrity sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@emotion/hash" "0.8.0" - "@emotion/memoize" "0.7.4" - "@emotion/serialize" "^0.11.16" - babel-plugin-macros "^2.0.0" - babel-plugin-syntax-jsx "^6.18.0" - convert-source-map "^1.5.0" - escape-string-regexp "^1.0.5" - find-root "^1.1.0" - source-map "^0.5.7" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-macros@^2.0.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" - integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== - dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" - -babel-plugin-syntax-jsx@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= - -babel-polyfill@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" - integrity sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== - dependencies: - babel-plugin-jest-hoist "^27.5.1" - babel-preset-current-node-syntax "^1.0.0" - -babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-arraybuffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" - integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== - -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.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, 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" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.17.5: - version "4.20.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" - integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== - dependencies: - caniuse-lite "^1.0.30001317" - electron-to-chromium "^1.4.84" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -btoa@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" - integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cachedir@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" - integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== - -call-bind@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" - integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.0" - -call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001317: - version "1.0.30001322" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz#2e4c09d11e1e8f852767dab287069a8d0c29d623" - integrity sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew== - -canvg@^3.0.6: - version "3.0.10" - resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.10.tgz#8e52a2d088b6ffa23ac78970b2a9eebfae0ef4b3" - integrity sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q== - dependencies: - "@babel/runtime" "^7.12.5" - "@types/raf" "^3.4.0" - core-js "^3.8.3" - raf "^3.4.1" - regenerator-runtime "^0.13.7" - rgbcolor "^1.0.1" - stackblur-canvas "^2.0.0" - svg-pathdata "^6.0.3" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -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== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - -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 sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= - dependencies: - restore-cursor "^1.0.1" - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-table3@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" - integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== - dependencies: - object-assign "^4.1.0" - string-width "^4.2.0" - optionalDependencies: - colors "^1.1.2" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collapse-white-space@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" - integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, 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== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.20.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== - -common-tags@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" - integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0, concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== - -convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -core-js@^2.4.0, core-js@^2.5.0: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== - -core-js@^3.6.0, core-js@^3.8.3: - version "3.26.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.26.1.tgz#7a9816dabd9ee846c1c0fe0e8fcad68f3709134e" - integrity sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cron-validator@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cron-validator/-/cron-validator-1.1.1.tgz#0a27bb75508c7bc03c8b840d2d9f170eeacb5615" - integrity sha512-vfZb05w/wezuwPZBDvdIBmJp2BvuJExHeyKRa5oBqD2ZDXR61hb3QgPc/3ZhBEQJlAy8Jlnn5XC/JCT3IDqxwg== - -cross-fetch@^3.0.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-line-break@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0" - integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== - dependencies: - utrie "^1.0.2" - -css-what@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" - integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -csstype@^2.5.7: - version "2.6.13" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.13.tgz#a6893015b90e84dd6e85d0e3b442a1e84f2dbe0f" - integrity sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A== - -csstype@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" - integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A== - -cypress@^5.0.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-5.6.0.tgz#6781755c3ddfd644ce3179fcd7389176c0c82280" - integrity sha512-cs5vG3E2JLldAc16+5yQxaVRLLqMVya5RlrfPWkC72S5xrlHFdw7ovxPb61s4wYweROKTyH01WQc2PFzwwVvyQ== - dependencies: - "@cypress/listr-verbose-renderer" "^0.4.1" - "@cypress/request" "^2.88.5" - "@cypress/xvfb" "^1.2.4" - "@types/sinonjs__fake-timers" "^6.0.1" - "@types/sizzle" "^2.3.2" - arch "^2.1.2" - blob-util "2.0.2" - bluebird "^3.7.2" - cachedir "^2.3.0" - chalk "^4.1.0" - check-more-types "^2.24.0" - cli-table3 "~0.6.0" - commander "^5.1.0" - common-tags "^1.8.0" - debug "^4.1.1" - eventemitter2 "^6.4.2" - execa "^4.0.2" - executable "^4.1.1" - extract-zip "^1.7.0" - fs-extra "^9.0.1" - getos "^3.2.1" - is-ci "^2.0.0" - is-installed-globally "^0.3.2" - lazy-ass "^1.6.0" - listr "^0.14.3" - lodash "^4.17.19" - log-symbols "^4.0.0" - minimist "^1.2.5" - moment "^2.27.0" - ospath "^1.2.2" - pretty-bytes "^5.4.1" - ramda "~0.26.1" - request-progress "^3.0.0" - supports-color "^7.2.0" - tmp "~0.2.1" - untildify "^4.0.0" - url "^0.11.0" - yauzl "^2.10.0" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decimal.js@^10.2.1: - version "10.4.2" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" - integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -deeks@2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/deeks/-/deeks-2.2.6.tgz#7fc4c07c4251e1deb7e919fd14734fea151dc8b2" - integrity sha512-KlfWy96oUxxfAEC8q8QVoik++6yWsTYT9Cm5S6nUddLciZaOy7WDfcFbVCyeHKFO44ptWxtz7sQd9Upm4SGf4g== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -doc-path@2.0.4, doc-path@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/doc-path/-/doc-path-2.1.2.tgz#08344d188619a6ff7c6631e462362dd720e4e81f" - integrity sha512-saM17czrIb4jYLsS5728OKbCa/WQ3xVctkGiMixOHz3X1VYsRn/Q5xPMxE1A5WN+XHHLWak34mMMjmAKRgMLeA== - -dom-helpers@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b" - integrity sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -dom-serializer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.0.1.tgz#79695eb49af3cd8abc8d93a73da382deb1ca0795" - integrity sha512-1Aj1Qy3YLbdslkI75QEOfdp9TkQ3o8LRISAzxOibjBs/xWwr1WxZFOQphFkZuepHFGo+kB8e5FVJSS0faAJ4Rw== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - entities "^2.0.0" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -domhandler@^3.0, domhandler@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" - integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== - dependencies: - domelementtype "^2.0.1" - -dompurify@^2.2.0, dompurify@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.1.tgz#f9cb1a275fde9af6f2d0a2644ef648dd6847b631" - integrity sha512-ewwFzHzrrneRjxzmK6oVz/rZn9VWspGFRDb4/rRtIsM1n36t9AKma/ye8syCpcw+XJ25kOK/hOG7t1j2I2yBqA== - -domutils@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.2.0.tgz#f3ce1610af5c30280bde1b71f84b018b958f32cf" - integrity sha512-0haAxVr1PR0SqYwCH7mxMpHZUwjih9oPPedqpR/KufsnxPyZ9dyVw1R5093qnJF3WXSbjBkdzRWLw/knJV/fAg== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^3.0.0" - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -elastic-builder@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/elastic-builder/-/elastic-builder-2.7.1.tgz#46657831eb93f4c1f42dce1779479a1c98e1bcb7" - integrity sha512-tBhrNDiP5ef+xdKMU5Xp1ssaHONxnIAjs0S7W2BNPJxKcGTxcFLgErRJTZS//Go5RwyQrrvDyGoSrfDqwXLMng== - dependencies: - babel-runtime "^6.26.0" - lodash.has "^4.5.2" - lodash.hasin "^4.5.2" - lodash.head "^4.0.1" - lodash.isempty "^4.4.0" - lodash.isnil "^4.0.0" - lodash.isobject "^3.0.2" - lodash.isstring "^4.0.1" - lodash.omit "^4.5.0" - -electron-to-chromium@^1.4.84: - version "1.4.101" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.101.tgz#71f3a10065146d7445ba5d4c06ba2cc063b0817a" - integrity sha512-XJH+XmJjACx1S7ASl/b//KePcda5ocPnFH2jErztXcIS8LpP0SE6rX8ZxiY5/RaDPnaF1rj0fPaHfppzb0e2Aw== - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enhanced-resolve@~0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" - integrity sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.2.0" - tapable "^0.1.8" - -entities@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" - integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== - -enzyme-adapter-react-16@^1.15.5: - version "1.15.6" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz#fd677a658d62661ac5afd7f7f541f141f8085901" - integrity sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g== - dependencies: - enzyme-adapter-utils "^1.14.0" - enzyme-shallow-equal "^1.0.4" - has "^1.0.3" - object.assign "^4.1.2" - object.values "^1.1.2" - prop-types "^15.7.2" - react-is "^16.13.1" - react-test-renderer "^16.0.0-0" - semver "^5.7.0" - -enzyme-adapter-utils@^1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.0.tgz#afbb0485e8033aa50c744efb5f5711e64fbf1ad0" - integrity sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg== - dependencies: - airbnb-prop-types "^2.16.0" - function.prototype.name "^1.1.3" - has "^1.0.3" - object.assign "^4.1.2" - object.fromentries "^2.0.3" - prop-types "^15.7.2" - semver "^5.7.1" - -enzyme-shallow-equal@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz#b9256cb25a5f430f9bfe073a84808c1d74fced2e" - integrity sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q== - dependencies: - has "^1.0.3" - object-is "^1.1.2" - -errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.17.4: - version "1.17.7" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" - integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.18.0-next.1: - version "1.18.0-next.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" - integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-negative-zero "^2.0.0" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.19.0, es-abstract@^1.19.1: - version "1.19.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.4.tgz#79a95527af382eb276075627e53762393ce8b57a" - integrity sha512-flV8e5g9/xulChMG48Fygk1ptpo4lQRJ0eJYtxJFgi7pklLx7EFcOJ34jnvr8pbWlaFN/AT1cZpe0hiFel9Hqg== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-import-resolver-node@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-import-resolver-webpack@0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.11.1.tgz#fcf1fd57a775f51e18f442915f85dd6ba45d2f26" - integrity sha512-eK3zR7xVQR/MaoBWwGuD+CULYVuqe5QFlDukman71aI6IboCGzggDUohHNfu1ZeBnbHcUHJc0ywWoXUBNB6qdg== - dependencies: - array-find "^1.0.0" - debug "^2.6.8" - enhanced-resolve "~0.9.0" - find-root "^1.1.0" - has "^1.0.1" - interpret "^1.0.0" - lodash "^4.17.4" - node-libs-browser "^1.0.0 || ^2.0.0" - resolve "^1.10.0" - semver "^5.3.0" - -eslint-plugin-babel@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz#75a2413ffbf17e7be57458301c60291f2cfbf560" - integrity sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g== - dependencies: - eslint-rule-composer "^0.3.0" - -eslint-plugin-no-unsanitized@^3.0.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.2.tgz#a54724e0b81d43279bb1f8f5e1d82c97da78c858" - integrity sha512-KPShfliA3Uy9qqwQx35P1fwIOeJjZkb0FbMMUFztRYRposzaynsM8JCEb952fqkidROl1kpqY80uSvn+TcWkQQ== - -eslint-plugin-prefer-object-spread@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prefer-object-spread/-/eslint-plugin-prefer-object-spread-1.2.1.tgz#27fb91853690cceb3ae6101d9c8aecc6a67a402c" - integrity sha1-J/uRhTaQzOs65hAdnIrsxqZ6QCw= - -eslint-rule-composer@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" - integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esrecurse@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter2@^6.4.2: - version "6.4.3" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.3.tgz#35c563619b13f3681e7eb05cbdaf50f56ba58820" - integrity sha512-t0A2msp6BzOf+QAcI6z9XMktLj52OjGQg+8SJH6v5+3uxNpWYRR3wQmfA+6xtMU9kOC59qk9licus5dYcrYkMQ== - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^4.0.2: - 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" - -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-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, 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== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-zip@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" - integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== - dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" - yauzl "^2.10.0" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -fflate@^0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.4.8.tgz#f90b82aefbd8ac174213abb338bd7ef848f0f5ae" - integrity sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA== - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.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-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -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" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^9.0.1: - 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-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45" - integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - functions-have-names "^1.2.0" - -function.prototype.name@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functions-have-names@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" - integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== - -functions-have-names@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.2.tgz#98d93991c39da9361f8e50b337c4f6e41f120e21" - integrity sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA== - -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: - version "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-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" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" - integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -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" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^5.0.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-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -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 sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-all@^3.2.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.3.1.tgz#6be2d5d8276902319f640fbf839fbe15b35e7667" - integrity sha512-Y+ESjdI7ZgMwfzanHZYQ87C59jOO0i+Hd+QYtVt9PhLi6d8wlOpzQnfBxWUlaTuAoR3TkybLqqbIoWveU4Ji7Q== - dependencies: - glob "^7.2.3" - yargs "^15.3.1" - -glob-parent@^3.1.0, glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.3, glob@^7.1.4: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.2.0, 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== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== - dependencies: - ini "1.3.7" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -graceful-fs@^4.2.9: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -harmony-reflect@^1.4.6: - version "1.6.1" - resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" - integrity sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoist-non-react-statics@^2.3.1: - version "2.5.5" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" - integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== - -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-to-react@^1.3.4: - version "1.4.3" - resolved "https://registry.yarnpkg.com/html-to-react/-/html-to-react-1.4.3.tgz#1430a1cb581ef29533892ec70a2fdc4554b17ffd" - integrity sha512-txe09A3vxW8yEZGJXJ1is5gGDfBEVACmZDSgwDyH5EsfRdOubBwBCg63ZThZP0xBn0UE4FyvMXZXmohusCxDcg== - dependencies: - domhandler "^3.0" - htmlparser2 "^4.1.0" - lodash.camelcase "^4.3.0" - ramda "^0.27" - -html2canvas@1.4.1, html2canvas@^1.0.0-rc.5: - version "1.4.1" - resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" - integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA== - dependencies: - css-line-break "^2.1.0" - text-segmentation "^1.0.3" - -htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== - -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== - -i18n-js@3.0.11: - version "3.0.11" - resolved "https://registry.yarnpkg.com/i18n-js/-/i18n-js-3.0.11.tgz#f9e96bdb641c5b9d6be12759d7c422089987ef02" - integrity sha512-v7dG3kYJTQTyox3NqDabPDE/ZotWntyMI9kh4cYi+XlCSnsIR+KBTS2opPyObL8WndnklcLzbNU92FP/mLge3Q== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -identity-obj-proxy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" - integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= - dependencies: - harmony-reflect "^1.4.6" - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== - -import-fresh@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ini@1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== - -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.4, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" - integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== - -is-callable@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" - integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== - -is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" - integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== - dependencies: - has "^1.0.3" - -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== - -is-installed-globally@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - -is-negative-zero@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" - integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - -is-path-inside@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-potential-custom-element-name@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-promise@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-regex@^1.1.0, is-regex@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" - integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== - dependencies: - has-symbols "^1.0.1" - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -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 sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-whitespace-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" - integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== - -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== - -is-word-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" - integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "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 sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -jest-diff@^25.2.1: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-dom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jest-dom/-/jest-dom-4.0.0.tgz#94eba3cbc6576e7bd6821867c92d176de28920eb" - integrity sha512-gBxYZlZB1Jgvf2gP2pRfjjUWF8woGBHj/g5rAQgFPB/0K2atGuhVcPO+BItyjWeKg9zM+dokgcMOH01vrWVMFA== - -jest-fetch-mock@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz#31749c456ae27b8919d69824f1c2bd85fe0a1f3b" - integrity sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw== - dependencies: - cross-fetch "^3.0.4" - promise-polyfill "^8.1.3" - -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== - -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== - dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - micromatch "^4.0.4" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== - -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-util@26.x: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.3.0.tgz#a8974b191df30e2bf523ebbfdbaeb8efca535b3e" - integrity sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw== - dependencies: - "@jest/types" "^26.3.0" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jquery@^3.5.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" - integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - 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 sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@16.5.0: - version "16.5.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.0.tgz#9e453505600cc5a70b385750d35256f380730cc4" - integrity sha512-QxZH0nmDTnTTVI0YDm4RUlaUPl5dcyn62G5TMDNfMmTW+J1u1v9gCR8WR+WZ6UghAa7nKJjDOFaI00eMMWvJFQ== - dependencies: - abab "^2.0.5" - acorn "^8.0.5" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - html-encoding-sniffer "^2.0.1" - is-potential-custom-element-name "^1.0.0" - nwsapi "^2.2.0" - parse5 "6.0.1" - request "^2.88.2" - request-promise-native "^1.0.9" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - ws "^7.4.4" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-2-csv@^3.7.6: - version "3.7.6" - resolved "https://registry.yarnpkg.com/json-2-csv/-/json-2-csv-3.7.6.tgz#2a88b323b8986f31dcd4ef785b3bfb3521d42899" - integrity sha512-um9bT7CgI77f/m5G/V5uRKz9UruFQFijD5Fh+EAnr5QowOJpdIk1ya37KSq1MxjBnJgvmpqCnI7ZjsvyTYiW0w== - dependencies: - deeks "2.2.6" - doc-path "2.0.4" - -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3, 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-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 sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jspdf@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-2.5.1.tgz#00c85250abf5447a05f3b32ab9935ab4a56592cc" - integrity sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA== - dependencies: - "@babel/runtime" "^7.14.0" - atob "^2.1.2" - btoa "^1.2.1" - fflate "^0.4.8" - optionalDependencies: - canvg "^3.0.6" - core-js "^3.6.0" - dompurify "^2.2.0" - html2canvas "^1.0.0-rc.5" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -lazy-ass@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^1.2.3, loader-utils@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - -lodash.has@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" - integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= - -lodash.hasin@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.hasin/-/lodash.hasin-4.5.2.tgz#f91e352378d21ef7090b9e7687c2ca35c5b4d52a" - integrity sha1-+R41I3jSHvcJC552h8LKNcW01So= - -lodash.head@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.head/-/lodash.head-4.0.1.tgz#e2aa322d3ec40cd6aae186082977d993b354ed9c" - integrity sha1-4qoyLT7EDNaq4YYIKXfZk7NU7Zw= - -lodash.isempty@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" - integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4= - -lodash.isnil@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c" - integrity sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw= - -lodash.isobject@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" - integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.omit@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" - integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= - -lodash.once@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - -lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" - integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== - dependencies: - chalk "^4.0.0" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-error@1.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -markdown-escapes@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" - integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdast-add-list-metadata@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz#95e73640ce2fc1fa2dcb7ec443d09e2bfe7db4cf" - integrity sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA== - dependencies: - unist-util-visit-parents "1.1.2" - -memory-fs@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" - integrity sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng== - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mini-create-react-context@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz#df60501c83151db69e28eac0ef08b4002efab040" - integrity sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA== - dependencies: - "@babel/runtime" "^7.5.5" - tiny-warning "^1.0.3" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@1.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@^0.5.1, mkdirp@^0.5.3: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^0.5.4: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -moment@^2.27.0, moment@^2.29.4: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -nan@^2.12.1: - version "2.17.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" - integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -"node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-releases@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -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" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.0: - 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" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" - integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.12.0, object-inspect@^1.9.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== - -object-inspect@^1.7.0, object-inspect@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== - -object-is@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" - integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.1, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.entries@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" - integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - has "^1.0.3" - -object.fromentries@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -object.values@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== - -ospath@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" - integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-entities@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-json@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" - integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -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" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@^1.7.0, path-to-regexp@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - 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 sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.0.5: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -pretty-bytes@^5.4.1: - version "5.5.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.5.0.tgz#0cecda50a74a941589498011cf23275aa82b339e" - integrity sha512-p+T744ZyjjiaFlMUZZv6YPC5JrkNj8maRmPaQCWFJFplUAzpIUTRaTcS+7wmZtUoFXHtESJb23ISliaWyz3SHA== - -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== - dependencies: - "@jest/types" "^25.5.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.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" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-polyfill@^8.1.3: - version "8.1.3" - resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116" - integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g== - -prop-types-exact@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" - integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== - dependencies: - has "^1.0.3" - object.assign "^4.1.0" - reflect.ownkeys "^0.2.0" - -prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^6.13.1: - version "6.13.2" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.2.tgz#3585aa9412c957cbd358fd5eaca7466f05586dda" - integrity sha512-BMmDaUiLDFU1hlM38jTFcRt7HYiGP/zt1sRzrIWm5zpeEuO1rkbPS0ELI3uehoLuuhHDCS8u8lhFN3fEN4JzPQ== - dependencies: - decode-uri-component "^0.2.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -raf@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - -ramda@^0.27: - version "0.27.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" - integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw== - -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" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -react-addons-test-utils@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz#c12b6efdc2247c10da7b8770d185080a7b047156" - integrity sha1-wStu/cIkfBDae4dw0YUICnsEcVY= - -react-id-generator@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/react-id-generator/-/react-id-generator-3.0.1.tgz#30ec683954b3c0a5aa0732c4b98ed0f88fd85d00" - integrity sha512-YxorMaYxB8ItXA3Cuadcl/8ZaquU9Tzrrr5ogFL8tNqevF96cmCtx3LZLXYqBEj3BxoV9aBIK5yJjIuX/XHQ1A== - -react-is@^16.12.0, react-is@^16.13.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-markdown@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-4.3.1.tgz#39f0633b94a027445b86c9811142d05381300f2f" - integrity sha512-HQlWFTbDxTtNY6bjgp3C3uv1h2xcjCSi1zAEzfBW9OwJJvENSYiLXWNXN5hHLsoqai7RnZiiHzcnWdXk2Splzw== - dependencies: - html-to-react "^1.3.4" - mdast-add-list-metadata "1.0.1" - prop-types "^15.7.2" - react-is "^16.8.6" - remark-parse "^5.0.0" - unified "^6.1.5" - unist-util-visit "^1.3.0" - xtend "^4.0.1" - -react-mde@^10.2.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/react-mde/-/react-mde-10.2.1.tgz#6debedbbed224155f5f4c025ae0c1655a41d385c" - integrity sha512-rq99Y6xQknZRQSzUpkY5KJRl3cE7GpiC+bSG2L10T2m1p6Y90zQxC060TWk1yoeXtGtveao1NXEV1UcpvOhRsQ== - -react-native-base64@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/react-native-base64/-/react-native-base64-0.0.2.tgz#c28463c2c6779ac3ec5fdd12979ebc8c5f9b410a" - integrity sha512-Fu/J1a2y0X22EJDWqJR2oEa1fpP4gTFjYxk8ElJdt1Yak3HOXmFJ7EohLVHU2DaQkgmKfw8qb7u/48gpzveRbg== - -react-native-i18n@^2.0.15: - version "2.0.15" - resolved "https://registry.yarnpkg.com/react-native-i18n/-/react-native-i18n-2.0.15.tgz#09b5a9836116fa7dbd0054c46e2d1014c1ef3c65" - integrity sha512-V8VwUP0TLda3oJvgt5tdnFaOV7WXPhTjCTLO7sXI3C2SHggSbD4bCUryMzNJhesimJidH21V2Owvj4zAylHoQQ== - dependencies: - i18n-js "3.0.11" - -react-native-safe-area-view@^0.14.9: - version "0.14.9" - resolved "https://registry.yarnpkg.com/react-native-safe-area-view/-/react-native-safe-area-view-0.14.9.tgz#90ee8383037010d9a5055a97cf97e4c1da1f0c3d" - integrity sha512-WII/ulhpVyL/qbYb7vydq7dJAfZRBcEhg4/UWt6F6nAKpLa3gAceMOxBxI914ppwSP/TdUsandFy6lkJQE0z4A== - dependencies: - hoist-non-react-statics "^2.3.1" - -react-navigation@^4.3.9: - version "4.4.1" - resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-4.4.1.tgz#7511b5d46bba8e52fc2f426144127a012454c84f" - integrity sha512-E0TJHLS8mcdliubPjbIfyplZG1oQhHYzH3cHKMSVXWE4dhSSf1x//r+92kW9LbS62v51Nj3Bxw2cJMHw0xP9Kw== - dependencies: - "@react-navigation/core" "^3.7.7" - "@react-navigation/native" "^3.8.1" - -react-router-dom@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.0.tgz#da1bfb535a0e89a712a93b97dd76f47ad1f32363" - integrity sha512-ObVBLjUZsphUUMVycibxgMdh5jJ1e3o+KpAZBVeHcNQZ4W+uUGGWsokurzlF4YOldQYRQL4y6yFRWM4m3svmuQ== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.2.1" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.1.tgz#4d2e4e9d5ae9425091845b8dbc6d9d276239774d" - integrity sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-test-renderer@^16.0.0-0, react-test-renderer@^16.12.0: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.14.0.tgz#e98360087348e260c56d4fe2315e970480c228ae" - integrity sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg== - dependencies: - object-assign "^4.1.1" - prop-types "^15.6.2" - react-is "^16.8.6" - scheduler "^0.19.1" - -react-toast-notifications@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/react-toast-notifications/-/react-toast-notifications-2.4.0.tgz#6213730bd1fe158fc01aeef200687ea94c5c5b24" - integrity sha512-8tkrbNh7LxkiFmtqAL/AiI55efIeI+fBk3c6ImsiZ0VObb4yvOq0cqYuJHyUiv9fuD2aBxvXGVH+n4Snt8qoWA== - dependencies: - "@emotion/core" "^10.0.14" - react-transition-group "^4.3.0" - -react-transition-group@^4.3.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" - integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -reflect.ownkeys@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" - integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= - -regenerator-runtime@^0.10.5: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" - integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remark-parse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" - integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.5.4, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -replace-ext@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= - -replace-in-file@^6.3.5: - version "6.3.5" - resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-6.3.5.tgz#ff956b0ab5bc96613207d603d197cd209400a654" - integrity sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg== - dependencies: - chalk "^4.1.2" - glob "^7.2.0" - yargs "^17.2.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 sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= - dependencies: - throttleit "^1.0.0" - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - 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" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve@^1.10.0, resolve@^1.5.0, resolve@^1.7.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.12.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.3.2: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -rgbcolor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d" - integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw== - -rimraf@^2.5.4, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== - dependencies: - aproba "^1.1.1" - -rxjs@^6.3.3: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", 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== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -semver@7.x: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -semver@^5.3.0, semver@^5.4.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-interval-async@1.0.33: - version "1.0.33" - resolved "https://registry.yarnpkg.com/set-interval-async/-/set-interval-async-1.0.33.tgz#f9a0a2ad7d8fb62cd6eac0ce088a6d631602089c" - integrity sha512-cKV9rLl707sWirvrZEL8XxyOxaPowueFRYKruRRj2cKHRd+M0JGg6IPqoUZVXkvaOZxvM3ulqDdNJuG5MmngxA== - dependencies: - "@babel/runtime" "7.5.0" - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -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== - -showdown@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/showdown/-/showdown-1.9.1.tgz#134e148e75cd4623e09c21b0511977d79b5ad0ef" - integrity sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA== - dependencies: - yargs "^14.2" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -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@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@~0.5.12: - 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== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -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" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - 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" - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -stackblur-canvas@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz#aa87bbed1560fdcd3138fff344fc6a1c413ebac4" - integrity sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ== - -state-toggle@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" - integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.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" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -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" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0, supports-color@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-pathdata@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz#80b0e0283b652ccbafb69ad4f8f73e8d3fbf2cac" - integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw== - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -symbol-tree@^3.2.4: - version "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== - -tapable@^0.1.8: - version "0.1.10" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" - integrity sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ== - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2, terser@^4.8.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" - integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-segmentation@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" - integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== - dependencies: - utrie "^1.0.2" - -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - -tiny-invariant@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" - integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== - -tiny-warning@^1.0.0, tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmpl@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" - integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -trim-trailing-lines@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" - integrity sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA== - -trim@0.0.1, trim@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim/-/trim-1.0.0.tgz#fd1f30b878bdd2d8435fa0f2cc9cbb55f518be7d" - integrity sha512-UgtES1lYpE+f4WiGY5lyJlHchuGhTa/xMPH96g/B7gc+pEQPiL41s6ECm7Ky3hkhARG/u1SHGFcleJodAvQOKQ== - -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" - integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== - -ts-jest@^26.1.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.3.0.tgz#6b2845045347dce394f069bb59358253bc1338a9" - integrity sha512-Jq2uKfx6bPd9+JDpZNMBJMdMQUC3sJ08acISj8NXlVgR2d5OqslEHOR2KHMgwymu8h50+lKIm0m0xj/ioYdW2Q== - dependencies: - "@types/jest" "26.x" - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "26.x" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "18.x" - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -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 sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -unherit@^1.0.4: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" - integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== - dependencies: - inherits "^2.0.0" - xtend "^4.0.0" - -unified@^6.1.5: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unist-util-is@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" - integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== - -unist-util-remove-position@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" - integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== - -unist-util-visit-parents@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz#f6e3afee8bdbf961c0e6f028ea3c0480028c3d06" - integrity sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q== - -unist-util-visit-parents@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" - integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== - dependencies: - unist-util-is "^3.0.0" - -unist-util-visit@^1.1.0, unist-util-visit@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" - integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== - dependencies: - unist-util-visit-parents "^2.0.0" - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -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== - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ== - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utrie@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" - integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw== - dependencies: - base64-arraybuffer "^1.0.2" - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vfile-location@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" - integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== - -vfile-message@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" - integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.41.5: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^8.0.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.4, ws@^7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0, y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yaml@^1.7.2: - version "1.10.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" - integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== - -yargs-parser@18.x, yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" - integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^14.2: - version "14.2.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" - integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.1" - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^17.2.1: - version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - 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 sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" diff --git a/reports-scheduler/detekt.yml b/detekt.yml similarity index 100% rename from reports-scheduler/detekt.yml rename to detekt.yml diff --git a/reports-scheduler/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from reports-scheduler/gradle/wrapper/gradle-wrapper.jar rename to gradle/wrapper/gradle-wrapper.jar diff --git a/reports-scheduler/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from reports-scheduler/gradle/wrapper/gradle-wrapper.properties rename to gradle/wrapper/gradle-wrapper.properties diff --git a/reports-scheduler/gradlew b/gradlew similarity index 100% rename from reports-scheduler/gradlew rename to gradlew diff --git a/reports-scheduler/gradlew.bat b/gradlew.bat similarity index 100% rename from reports-scheduler/gradlew.bat rename to gradlew.bat diff --git a/reports-scheduler/release-notes/create_release_notes.py b/release-notes/create_release_notes.py similarity index 100% rename from reports-scheduler/release-notes/create_release_notes.py rename to release-notes/create_release_notes.py diff --git a/reports-scheduler/.gitignore b/reports-scheduler/.gitignore deleted file mode 100644 index 59dc2666..00000000 --- a/reports-scheduler/.gitignore +++ /dev/null @@ -1,301 +0,0 @@ -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Kotlin ### -# Compiled class file - -# Log file - -# BlueJ files - -# Mobile Tools for Java (J2ME) - -# Package Files # - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml - -### Gradle ### -.gradle -build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -### Gradle Patch ### -**/build/ - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Intellij ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# Generated files -.idea/**/contentModel.xml - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -.idea/artifacts -.idea/compiler.xml -.idea/jarRepositories.xml -.idea/modules.xml -.idea/*.iml -.idea/modules -*.iml -*.ipr - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# AWS plugin -.idea/aws.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests - -# Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser - -### Intellij Patch ### -# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 - -# *.iml -# modules.xml -# .idea/misc.xml -# *.ipr - -# Sonarlint plugin -# https://plugins.jetbrains.com/plugin/7973-sonarlint -.idea/**/sonarlint/ - -# SonarQube Plugin -# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin -.idea/**/sonarIssues.xml - -# Markdown Navigator plugin -# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced -.idea/**/markdown-navigator.xml -.idea/**/markdown-navigator-enh.xml -.idea/**/markdown-navigator/ - -# Cache file creation bug -# See https://youtrack.jetbrains.com/issue/JBR-2257 -.idea/$CACHE_FILE$ - -# CodeStream plugin -# https://plugins.jetbrains.com/plugin/12206-codestream -.idea/codestream.xml - - -### Maven ### -target/ -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -pom.xml.next -release.properties -dependency-reduced-pom.xml -buildNumber.properties -.mvn/timing.properties -# https://github.com/takari/maven-wrapper#usage-without-binary-jar -.mvn/wrapper/maven-wrapper.jar - - -### Eclipse ### -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -.recommenders - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# PyDev specific (Python IDE for Eclipse) -*.pydevproject - -# CDT-specific (C/C++ Development Tooling) -.cproject - -# CDT- autotools -.autotools - -# Java annotation processor (APT) -.factorypath - -# PDT-specific (PHP Development Tools) -.buildpath - -# sbteclipse plugin -.target - -# Tern plugin -.tern-project - -# TeXlipse plugin -.texlipse - -# STS (Spring Tool Suite) -.springBeans - -# Code Recommenders -.recommenders/ - -# Annotation Processing -.apt_generated/ -.apt_generated_test/ - -# Scala IDE specific (Scala & Java development for Eclipse) -.cache-main -.scala_dependencies -.worksheet - -# Uncomment this line if you wish to ignore the project description file. -# Typically, this file would be tracked if it contains build/dependency configurations: -#.project - -### Eclipse Patch ### -# Spring Boot Tooling -.sts4-cache/ - -local-test -.local-* - -/artifacts/ diff --git a/reports-scheduler/scripts/build.sh b/scripts/build.sh similarity index 100% rename from reports-scheduler/scripts/build.sh rename to scripts/build.sh diff --git a/reports-scheduler/settings.gradle b/settings.gradle similarity index 100% rename from reports-scheduler/settings.gradle rename to settings.gradle diff --git a/reports-scheduler/src/main/config/reports-scheduler.yml b/src/main/config/reports-scheduler.yml similarity index 100% rename from reports-scheduler/src/main/config/reports-scheduler.yml rename to src/main/config/reports-scheduler.yml diff --git a/reports-scheduler/src/main/java/org/opensearch/reportsscheduler/metrics/BasicCounter.java b/src/main/java/org/opensearch/reportsscheduler/metrics/BasicCounter.java similarity index 100% rename from reports-scheduler/src/main/java/org/opensearch/reportsscheduler/metrics/BasicCounter.java rename to src/main/java/org/opensearch/reportsscheduler/metrics/BasicCounter.java diff --git a/reports-scheduler/src/main/java/org/opensearch/reportsscheduler/metrics/Counter.java b/src/main/java/org/opensearch/reportsscheduler/metrics/Counter.java similarity index 100% rename from reports-scheduler/src/main/java/org/opensearch/reportsscheduler/metrics/Counter.java rename to src/main/java/org/opensearch/reportsscheduler/metrics/Counter.java diff --git a/reports-scheduler/src/main/java/org/opensearch/reportsscheduler/metrics/Metrics.java b/src/main/java/org/opensearch/reportsscheduler/metrics/Metrics.java similarity index 100% rename from reports-scheduler/src/main/java/org/opensearch/reportsscheduler/metrics/Metrics.java rename to src/main/java/org/opensearch/reportsscheduler/metrics/Metrics.java diff --git a/reports-scheduler/src/main/java/org/opensearch/reportsscheduler/metrics/RollingCounter.java b/src/main/java/org/opensearch/reportsscheduler/metrics/RollingCounter.java similarity index 100% rename from reports-scheduler/src/main/java/org/opensearch/reportsscheduler/metrics/RollingCounter.java rename to src/main/java/org/opensearch/reportsscheduler/metrics/RollingCounter.java diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/ReportsSchedulerPlugin.kt b/src/main/kotlin/org/opensearch/reportsscheduler/ReportsSchedulerPlugin.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/ReportsSchedulerPlugin.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/ReportsSchedulerPlugin.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/CreateReportDefinitionAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/CreateReportDefinitionAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/CreateReportDefinitionAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/CreateReportDefinitionAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/DeleteReportDefinitionAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/DeleteReportDefinitionAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/DeleteReportDefinitionAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/DeleteReportDefinitionAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/GetAllReportDefinitionsAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/GetAllReportDefinitionsAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/GetAllReportDefinitionsAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/GetAllReportDefinitionsAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/GetAllReportInstancesAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/GetAllReportInstancesAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/GetAllReportInstancesAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/GetAllReportInstancesAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/GetReportDefinitionAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/GetReportDefinitionAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/GetReportDefinitionAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/GetReportDefinitionAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/GetReportInstanceAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/GetReportInstanceAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/GetReportInstanceAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/GetReportInstanceAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/InContextReportCreateAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/InContextReportCreateAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/InContextReportCreateAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/InContextReportCreateAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/OnDemandReportCreateAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/OnDemandReportCreateAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/OnDemandReportCreateAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/OnDemandReportCreateAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/PluginBaseAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/PluginBaseAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/PluginBaseAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/PluginBaseAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/ReportDefinitionActions.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/ReportDefinitionActions.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/ReportDefinitionActions.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/ReportDefinitionActions.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/ReportInstanceActions.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/ReportInstanceActions.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/ReportInstanceActions.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/ReportInstanceActions.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/UpdateReportDefinitionAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/UpdateReportDefinitionAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/UpdateReportDefinitionAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/UpdateReportDefinitionAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/UpdateReportInstanceStatusAction.kt b/src/main/kotlin/org/opensearch/reportsscheduler/action/UpdateReportInstanceStatusAction.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/UpdateReportInstanceStatusAction.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/action/UpdateReportInstanceStatusAction.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/index/ReportDefinitionsIndex.kt b/src/main/kotlin/org/opensearch/reportsscheduler/index/ReportDefinitionsIndex.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/index/ReportDefinitionsIndex.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/index/ReportDefinitionsIndex.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/index/ReportInstancesIndex.kt b/src/main/kotlin/org/opensearch/reportsscheduler/index/ReportInstancesIndex.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/index/ReportInstancesIndex.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/index/ReportInstancesIndex.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/BaseResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/BaseResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/BaseResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/BaseResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionRequest.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionRequest.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionRequest.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionRequest.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionRequest.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionRequest.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionRequest.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionRequest.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsRequest.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsRequest.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsRequest.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsRequest.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesRequest.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesRequest.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesRequest.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesRequest.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionRequest.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionRequest.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionRequest.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionRequest.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceRequest.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceRequest.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceRequest.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceRequest.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateRequest.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateRequest.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateRequest.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateRequest.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateRequest.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateRequest.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateRequest.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateRequest.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinition.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinition.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinition.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinition.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetails.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetails.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetails.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetails.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetailsDoc.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetailsDoc.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetailsDoc.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetailsDoc.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetailsSearchResults.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetailsSearchResults.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetailsSearchResults.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/ReportDefinitionDetailsSearchResults.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstance.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstance.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstance.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstance.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstanceDoc.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstanceDoc.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstanceDoc.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstanceDoc.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstanceSearchResults.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstanceSearchResults.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstanceSearchResults.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/ReportInstanceSearchResults.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/RestTag.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/RestTag.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/RestTag.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/RestTag.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/SearchResults.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/SearchResults.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/SearchResults.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/SearchResults.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionRequest.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionRequest.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionRequest.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionRequest.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusRequest.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusRequest.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusRequest.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusRequest.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusResponse.kt b/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusResponse.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusResponse.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusResponse.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/OnDemandReportRestHandler.kt b/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/OnDemandReportRestHandler.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/OnDemandReportRestHandler.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/resthandler/OnDemandReportRestHandler.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/PluginBaseHandler.kt b/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/PluginBaseHandler.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/PluginBaseHandler.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/resthandler/PluginBaseHandler.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportDefinitionListRestHandler.kt b/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportDefinitionListRestHandler.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportDefinitionListRestHandler.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportDefinitionListRestHandler.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportDefinitionRestHandler.kt b/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportDefinitionRestHandler.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportDefinitionRestHandler.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportDefinitionRestHandler.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportInstanceListRestHandler.kt b/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportInstanceListRestHandler.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportInstanceListRestHandler.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportInstanceListRestHandler.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportInstanceRestHandler.kt b/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportInstanceRestHandler.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportInstanceRestHandler.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportInstanceRestHandler.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportStatsRestHandler.kt b/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportStatsRestHandler.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportStatsRestHandler.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/resthandler/ReportStatsRestHandler.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/RestResponseToXContentListener.kt b/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/RestResponseToXContentListener.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/resthandler/RestResponseToXContentListener.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/resthandler/RestResponseToXContentListener.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/scheduler/ReportDefinitionJobParser.kt b/src/main/kotlin/org/opensearch/reportsscheduler/scheduler/ReportDefinitionJobParser.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/scheduler/ReportDefinitionJobParser.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/scheduler/ReportDefinitionJobParser.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/scheduler/ReportDefinitionJobRunner.kt b/src/main/kotlin/org/opensearch/reportsscheduler/scheduler/ReportDefinitionJobRunner.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/scheduler/ReportDefinitionJobRunner.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/scheduler/ReportDefinitionJobRunner.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/security/SecurityAccess.kt b/src/main/kotlin/org/opensearch/reportsscheduler/security/SecurityAccess.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/security/SecurityAccess.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/security/SecurityAccess.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/security/UserAccessManager.kt b/src/main/kotlin/org/opensearch/reportsscheduler/security/UserAccessManager.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/security/UserAccessManager.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/security/UserAccessManager.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/settings/PluginSettings.kt b/src/main/kotlin/org/opensearch/reportsscheduler/settings/PluginSettings.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/settings/PluginSettings.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/settings/PluginSettings.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/util/Helpers.kt b/src/main/kotlin/org/opensearch/reportsscheduler/util/Helpers.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/util/Helpers.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/util/Helpers.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/util/OpenForTesting.kt b/src/main/kotlin/org/opensearch/reportsscheduler/util/OpenForTesting.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/util/OpenForTesting.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/util/OpenForTesting.kt diff --git a/reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/util/SecureIndexClient.kt b/src/main/kotlin/org/opensearch/reportsscheduler/util/SecureIndexClient.kt similarity index 100% rename from reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/util/SecureIndexClient.kt rename to src/main/kotlin/org/opensearch/reportsscheduler/util/SecureIndexClient.kt diff --git a/reports-scheduler/src/main/plugin-metadata/plugin-security.policy b/src/main/plugin-metadata/plugin-security.policy similarity index 100% rename from reports-scheduler/src/main/plugin-metadata/plugin-security.policy rename to src/main/plugin-metadata/plugin-security.policy diff --git a/reports-scheduler/src/main/resources/META-INF/services/org.opensearch.jobscheduler.spi.JobSchedulerExtension b/src/main/resources/META-INF/services/org.opensearch.jobscheduler.spi.JobSchedulerExtension similarity index 100% rename from reports-scheduler/src/main/resources/META-INF/services/org.opensearch.jobscheduler.spi.JobSchedulerExtension rename to src/main/resources/META-INF/services/org.opensearch.jobscheduler.spi.JobSchedulerExtension diff --git a/reports-scheduler/src/main/resources/notifications/template/email_content_template.html b/src/main/resources/notifications/template/email_content_template.html similarity index 100% rename from reports-scheduler/src/main/resources/notifications/template/email_content_template.html rename to src/main/resources/notifications/template/email_content_template.html diff --git a/reports-scheduler/src/main/resources/notifications/template/logo.png b/src/main/resources/notifications/template/logo.png similarity index 100% rename from reports-scheduler/src/main/resources/notifications/template/logo.png rename to src/main/resources/notifications/template/logo.png diff --git a/reports-scheduler/src/main/resources/report-definitions-mapping.yml b/src/main/resources/report-definitions-mapping.yml similarity index 100% rename from reports-scheduler/src/main/resources/report-definitions-mapping.yml rename to src/main/resources/report-definitions-mapping.yml diff --git a/reports-scheduler/src/main/resources/report-definitions-settings.yml b/src/main/resources/report-definitions-settings.yml similarity index 100% rename from reports-scheduler/src/main/resources/report-definitions-settings.yml rename to src/main/resources/report-definitions-settings.yml diff --git a/reports-scheduler/src/main/resources/report-instances-mapping.yml b/src/main/resources/report-instances-mapping.yml similarity index 100% rename from reports-scheduler/src/main/resources/report-instances-mapping.yml rename to src/main/resources/report-instances-mapping.yml diff --git a/reports-scheduler/src/main/resources/report-instances-settings.yml b/src/main/resources/report-instances-settings.yml similarity index 100% rename from reports-scheduler/src/main/resources/report-instances-settings.yml rename to src/main/resources/report-instances-settings.yml diff --git a/reports-scheduler/src/test/java/org/opensearch/reportsscheduler/metrics/BasicCounterTests.java b/src/test/java/org/opensearch/reportsscheduler/metrics/BasicCounterTests.java similarity index 100% rename from reports-scheduler/src/test/java/org/opensearch/reportsscheduler/metrics/BasicCounterTests.java rename to src/test/java/org/opensearch/reportsscheduler/metrics/BasicCounterTests.java diff --git a/reports-scheduler/src/test/java/org/opensearch/reportsscheduler/metrics/RollingCounterTests.java b/src/test/java/org/opensearch/reportsscheduler/metrics/RollingCounterTests.java similarity index 100% rename from reports-scheduler/src/test/java/org/opensearch/reportsscheduler/metrics/RollingCounterTests.java rename to src/test/java/org/opensearch/reportsscheduler/metrics/RollingCounterTests.java diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/integTest/IntegTestHelpers.kt b/src/test/kotlin/org/opensearch/integTest/IntegTestHelpers.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/integTest/IntegTestHelpers.kt rename to src/test/kotlin/org/opensearch/integTest/IntegTestHelpers.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/integTest/PluginRestTestCase.kt b/src/test/kotlin/org/opensearch/integTest/PluginRestTestCase.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/integTest/PluginRestTestCase.kt rename to src/test/kotlin/org/opensearch/integTest/PluginRestTestCase.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/integTest/ReportsSchedulerPluginIT.kt b/src/test/kotlin/org/opensearch/integTest/ReportsSchedulerPluginIT.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/integTest/ReportsSchedulerPluginIT.kt rename to src/test/kotlin/org/opensearch/integTest/ReportsSchedulerPluginIT.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/integTest/bwc/ReportsSchedulerBackwardsCompatibilityIT.kt b/src/test/kotlin/org/opensearch/integTest/bwc/ReportsSchedulerBackwardsCompatibilityIT.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/integTest/bwc/ReportsSchedulerBackwardsCompatibilityIT.kt rename to src/test/kotlin/org/opensearch/integTest/bwc/ReportsSchedulerBackwardsCompatibilityIT.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/integTest/rest/InContextMenuReportGenerationIT.kt b/src/test/kotlin/org/opensearch/integTest/rest/InContextMenuReportGenerationIT.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/integTest/rest/InContextMenuReportGenerationIT.kt rename to src/test/kotlin/org/opensearch/integTest/rest/InContextMenuReportGenerationIT.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/integTest/rest/OnDemandReportGenerationIT.kt b/src/test/kotlin/org/opensearch/integTest/rest/OnDemandReportGenerationIT.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/integTest/rest/OnDemandReportGenerationIT.kt rename to src/test/kotlin/org/opensearch/integTest/rest/OnDemandReportGenerationIT.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/integTest/rest/ReportDefinitionIT.kt b/src/test/kotlin/org/opensearch/integTest/rest/ReportDefinitionIT.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/integTest/rest/ReportDefinitionIT.kt rename to src/test/kotlin/org/opensearch/integTest/rest/ReportDefinitionIT.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/integTest/rest/ReportInstanceIT.kt b/src/test/kotlin/org/opensearch/integTest/rest/ReportInstanceIT.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/integTest/rest/ReportInstanceIT.kt rename to src/test/kotlin/org/opensearch/integTest/rest/ReportInstanceIT.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/TestHelpers.kt b/src/test/kotlin/org/opensearch/reportsscheduler/TestHelpers.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/TestHelpers.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/TestHelpers.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionRequestTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionRequestTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionRequestTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionRequestTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionResponseTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionResponseTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionResponseTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/CreateReportDefinitionResponseTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionRequestTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionRequestTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionRequestTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionRequestTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionResponseTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionResponseTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionResponseTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/DeleteReportDefinitionResponseTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsRequestTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsRequestTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsRequestTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsRequestTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsResponseTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsResponseTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsResponseTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportDefinitionsResponseTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesRequestTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesRequestTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesRequestTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesRequestTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesResponseTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesResponseTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesResponseTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/GetAllReportInstancesResponseTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionRequestTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionRequestTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionRequestTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionRequestTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionResponseTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionResponseTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionResponseTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportDefinitionResponseTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceRequestTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceRequestTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceRequestTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceRequestTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceResponseTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceResponseTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceResponseTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/GetReportInstanceResponseTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateRequestTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateRequestTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateRequestTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateRequestTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateResponseTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateResponseTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateResponseTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/InContextReportCreateResponseTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateRequestTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateRequestTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateRequestTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateRequestTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateResponseTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateResponseTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateResponseTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/OnDemandReportCreateResponseTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionRequestTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionRequestTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionRequestTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionRequestTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionResponseTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionResponseTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionResponseTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportDefinitionResponseTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusRequestTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusRequestTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusRequestTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusRequestTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusResponseTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusResponseTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusResponseTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/model/UpdateReportInstanceStatusResponseTests.kt diff --git a/reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/util/HelpersTests.kt b/src/test/kotlin/org/opensearch/reportsscheduler/util/HelpersTests.kt similarity index 100% rename from reports-scheduler/src/test/kotlin/org/opensearch/reportsscheduler/util/HelpersTests.kt rename to src/test/kotlin/org/opensearch/reportsscheduler/util/HelpersTests.kt diff --git a/reports-scheduler/src/test/resources/bwc/job-scheduler/.gitignore b/src/test/resources/bwc/job-scheduler/.gitignore similarity index 100% rename from reports-scheduler/src/test/resources/bwc/job-scheduler/.gitignore rename to src/test/resources/bwc/job-scheduler/.gitignore diff --git a/reports-scheduler/src/test/resources/bwc/reports-scheduler/.gitignore b/src/test/resources/bwc/reports-scheduler/.gitignore similarity index 100% rename from reports-scheduler/src/test/resources/bwc/reports-scheduler/.gitignore rename to src/test/resources/bwc/reports-scheduler/.gitignore diff --git a/reports-scheduler/src/test/resources/job-scheduler/.gitignore b/src/test/resources/job-scheduler/.gitignore similarity index 100% rename from reports-scheduler/src/test/resources/job-scheduler/.gitignore rename to src/test/resources/job-scheduler/.gitignore diff --git a/reports-scheduler/src/test/resources/security/sample.pem b/src/test/resources/security/sample.pem similarity index 100% rename from reports-scheduler/src/test/resources/security/sample.pem rename to src/test/resources/security/sample.pem diff --git a/reports-scheduler/src/test/resources/security/test-kirk.jks b/src/test/resources/security/test-kirk.jks similarity index 100% rename from reports-scheduler/src/test/resources/security/test-kirk.jks rename to src/test/resources/security/test-kirk.jks