From 48eb32809f088217ca5ee9869ae8283547001251 Mon Sep 17 00:00:00 2001 From: Florence Haudin Date: Tue, 18 Apr 2023 16:35:37 +0200 Subject: [PATCH 01/24] Migrate jupyterlab-git extension to jupyterLab 4. --- .eslintrc.js | 3 +- .gitignore | 25 +-- .yarnrc.yml | 3 + LICENSE | 19 +- MANIFEST.in | 23 --- RELEASE.md | 19 +- .../.github/workflows/binder-on-pr.yml | 16 ++ _temp_extension/.github/workflows/build.yml | 150 ++++++++++++++ .../.github/workflows/check-release.yml | 29 +++ .../.github/workflows/enforce-label.yml | 13 ++ .../.github/workflows/prep-release.yml | 44 +++++ .../.github/workflows/publish-release.yml | 56 ++++++ .../workflows/update-integration-tests.yml | 50 +++++ _temp_extension/.gitignore | 125 ++++++++++++ _temp_extension/.prettierignore | 6 + _temp_extension/.yarnrc.yml | 3 + _temp_extension/CHANGELOG.md | 5 + _temp_extension/LICENSE | 29 +++ _temp_extension/README.md | 96 +++++++++ _temp_extension/RELEASE.md | 65 ++++++ _temp_extension/babel.config.js | 1 + _temp_extension/binder/environment.yml | 21 ++ _temp_extension/binder/postBuild | 47 +++++ _temp_extension/install.json | 5 + _temp_extension/jest.config.js | 21 ++ _temp_extension/jupyterlab_git/__init__.py | 9 + _temp_extension/package.json | 185 ++++++++++++++++++ _temp_extension/pyproject.toml | 76 +++++++ _temp_extension/schema/plugin.json | 8 + _temp_extension/setup.py | 1 + .../src/__tests__/jupyterlab_git.spec.ts | 9 + _temp_extension/src/index.ts | 34 ++++ _temp_extension/style/base.css | 5 + _temp_extension/style/index.css | 1 + _temp_extension/style/index.js | 1 + _temp_extension/tsconfig.json | 24 +++ _temp_extension/tsconfig.test.json | 3 + _temp_extension/ui-tests/README.md | 148 ++++++++++++++ .../ui-tests/jupyter_server_test_config.py | 12 ++ _temp_extension/ui-tests/package.json | 15 ++ _temp_extension/ui-tests/playwright.config.js | 14 ++ .../ui-tests/tests/jupyterlab_git.spec.ts | 21 ++ _temp_extension/ui-tests/yarn.lock | 0 binder/environment.yml | 6 +- binder/postBuild | 8 - install.json | 4 +- jest.config.js | 9 +- pyproject.toml | 39 +--- .../test-components/FileItem.spec.tsx | 3 +- src/cloneCommand.ts | 2 +- src/commandsAndMenu.tsx | 14 +- src/components/CommitComparisonBox.tsx | 2 +- src/components/FileList.tsx | 2 +- src/components/GitPanel.tsx | 2 +- src/components/ManageRemoteDialogue.tsx | 2 +- src/components/NewBranchDialog.tsx | 2 +- src/components/Toolbar.tsx | 2 +- src/components/diff/PlainTextDiff.ts | 10 +- src/git.ts | 2 +- src/handler.ts | 46 +++++ src/index.ts | 7 +- src/version.ts | 2 + src/widgets/GitWidget.tsx | 2 +- src/widgets/discardAllChanges.ts | 2 +- ui-tests/tests/jupyterlab_git.spec.ts | 21 ++ 65 files changed, 1486 insertions(+), 143 deletions(-) create mode 100644 .yarnrc.yml delete mode 100644 MANIFEST.in create mode 100644 _temp_extension/.github/workflows/binder-on-pr.yml create mode 100644 _temp_extension/.github/workflows/build.yml create mode 100644 _temp_extension/.github/workflows/check-release.yml create mode 100644 _temp_extension/.github/workflows/enforce-label.yml create mode 100644 _temp_extension/.github/workflows/prep-release.yml create mode 100644 _temp_extension/.github/workflows/publish-release.yml create mode 100644 _temp_extension/.github/workflows/update-integration-tests.yml create mode 100644 _temp_extension/.gitignore create mode 100644 _temp_extension/.prettierignore create mode 100644 _temp_extension/.yarnrc.yml create mode 100644 _temp_extension/CHANGELOG.md create mode 100644 _temp_extension/LICENSE create mode 100644 _temp_extension/README.md create mode 100644 _temp_extension/RELEASE.md create mode 100644 _temp_extension/babel.config.js create mode 100644 _temp_extension/binder/environment.yml create mode 100755 _temp_extension/binder/postBuild create mode 100644 _temp_extension/install.json create mode 100644 _temp_extension/jest.config.js create mode 100644 _temp_extension/jupyterlab_git/__init__.py create mode 100644 _temp_extension/package.json create mode 100644 _temp_extension/pyproject.toml create mode 100644 _temp_extension/schema/plugin.json create mode 100644 _temp_extension/setup.py create mode 100644 _temp_extension/src/__tests__/jupyterlab_git.spec.ts create mode 100644 _temp_extension/src/index.ts create mode 100644 _temp_extension/style/base.css create mode 100644 _temp_extension/style/index.css create mode 100644 _temp_extension/style/index.js create mode 100644 _temp_extension/tsconfig.json create mode 100644 _temp_extension/tsconfig.test.json create mode 100644 _temp_extension/ui-tests/README.md create mode 100644 _temp_extension/ui-tests/jupyter_server_test_config.py create mode 100644 _temp_extension/ui-tests/package.json create mode 100644 _temp_extension/ui-tests/playwright.config.js create mode 100644 _temp_extension/ui-tests/tests/jupyterlab_git.spec.ts create mode 100644 _temp_extension/ui-tests/yarn.lock create mode 100644 src/handler.ts create mode 100644 src/version.ts create mode 100644 ui-tests/tests/jupyterlab_git.spec.ts diff --git a/.eslintrc.js b/.eslintrc.js index 1033c97fd..718523239 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -3,11 +3,12 @@ module.exports = { 'eslint:recommended', 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', 'plugin:react/recommended' ], parser: '@typescript-eslint/parser', parserOptions: { - project: 'tsconfig.test.json', + project: 'tsconfig.json', sourceType: 'module' }, plugins: ['@typescript-eslint'], diff --git a/.gitignore b/.gitignore index bcd487d8e..ae58ed316 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,6 @@ node_modules/ jupyterlab_git/labextension # Version file is handled by hatchling jupyterlab_git/_version.py -src/version.ts # Integration tests ui-tests/test-results/ @@ -85,9 +84,6 @@ docs/_build/ # PyBuilder target/ -# Jupyter Notebook -.ipynb_checkpoints - # pyenv .python-version @@ -97,14 +93,6 @@ celerybeat-schedule # SageMath parsed files *.sage.py -# dotenv -.env - -# virtualenv -.venv -venv/ -ENV/ - # Spyder project settings .spyderproject .spyproject @@ -133,14 +121,5 @@ dmypy.json # OSX files .DS_Store -# jetbrains ide stuff -*.iml -.idea/ - -# vscode ide stuff -*.code-workspace -.history -.vscode - -# vim stuff -*.swp \ No newline at end of file +# Yarn cache +.yarn/ diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 000000000..fe1125f54 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,3 @@ +enableImmutableInstalls: false + +nodeLinker: node-modules diff --git a/LICENSE b/LICENSE index 936960458..3d314769e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,20 +1,21 @@ BSD 3-Clause License -Copyright (c) 2020, Jupyter Development Team All rights reserved. +Copyright (c) 2023, Jupyter Development Team +All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 2fd166155..000000000 --- a/MANIFEST.in +++ /dev/null @@ -1,23 +0,0 @@ -include LICENSE -include README.md -include pyproject.toml -include jupyter-config/jupyterlab_git.json - -include package.json -include install.json -include ts*.json - -graft jupyterlab_git/labextension - -# Javascript files -graft src -graft style -prune **/node_modules -prune lib - -# Patterns to exclude from any directory -global-exclude *~ -global-exclude *.pyc -global-exclude *.pyo -global-exclude .git -global-exclude .ipynb_checkpoints diff --git a/RELEASE.md b/RELEASE.md index e5aa1df1d..96b781e3b 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -6,10 +6,9 @@ The extension can be published to `PyPI` and `npm` manually or using the [Jupyte ### Python package -This extension can be distributed as Python -packages. All of the Python -packaging instructions in the `pyproject.toml` file to wrap your extension in a -Python package. Before generating a package, we first need to install `build`. +This extension can be distributed as Python packages. All of the Python +packaging instructions are in the `pyproject.toml` file to wrap your extension in a +Python package. Before generating a package, you first need to install some tools: ```bash pip install build twine hatch @@ -61,17 +60,15 @@ npm publish --access public The extension repository should already be compatible with the Jupyter Releaser. -Check out the [workflow documentation](https://github.com/jupyter-server/jupyter_releaser#typical-workflow) for more information. +Check out the [workflow documentation](https://jupyter-releaser.readthedocs.io/en/latest/get_started/making_release_from_repo.html) for more information. Here is a summary of the steps to cut a new release: -- Fork the [`jupyter-releaser` repo](https://github.com/jupyter-server/jupyter_releaser) -- Add `ADMIN_GITHUB_TOKEN`, `PYPI_TOKEN` and `NPM_TOKEN` to the Github Secrets in the fork +- Add `ADMIN_GITHUB_TOKEN`, `PYPI_TOKEN` and `NPM_TOKEN` to the [Github Secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) in the repository - Go to the Actions panel -- Run the "Draft Changelog" workflow -- Merge the Changelog PR -- Run the "Draft Release" workflow -- Run the "Publish Release" workflow +- Run the "Step 1: Prep Release" workflow +- Check the draft changelog +- Run the "Step 2: Publish Release" workflow ## Publishing to `conda-forge` diff --git a/_temp_extension/.github/workflows/binder-on-pr.yml b/_temp_extension/.github/workflows/binder-on-pr.yml new file mode 100644 index 000000000..47e458ef6 --- /dev/null +++ b/_temp_extension/.github/workflows/binder-on-pr.yml @@ -0,0 +1,16 @@ +name: Binder Badge +on: + pull_request_target: + types: [opened] + +jobs: + binder: + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - uses: jupyterlab/maintainer-tools/.github/actions/binder-link@v1 + with: + + github_token: ${{ secrets.github_token }} + diff --git a/_temp_extension/.github/workflows/build.yml b/_temp_extension/.github/workflows/build.yml new file mode 100644 index 000000000..df86f7cbf --- /dev/null +++ b/_temp_extension/.github/workflows/build.yml @@ -0,0 +1,150 @@ +name: Build + +on: + push: + branches: main + pull_request: + branches: '*' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Base Setup + uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + + - name: Install dependencies + run: python -m pip install -U "jupyterlab>=4.0.0b0,<5" + + - name: Lint the extension + run: | + set -eux + jlpm + jlpm run lint:check + + - name: Test the extension + run: | + set -eux + jlpm run test + + - name: Build the extension + run: | + set -eux + python -m pip install .[test] + + jupyter labextension list + jupyter labextension list 2>&1 | grep -ie "@jupyterlab/git.*OK" + python -m jupyterlab.browser_check + + - name: Package the extension + run: | + set -eux + + pip install build + python -m build + pip uninstall -y "jupyterlab_git" jupyterlab + + - name: Upload extension packages + uses: actions/upload-artifact@v3 + with: + name: extension-artifacts + path: dist/jupyterlab_git* + if-no-files-found: error + + test_isolated: + needs: build + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' + architecture: 'x64' + - uses: actions/download-artifact@v3 + with: + name: extension-artifacts + - name: Install and Test + run: | + set -eux + # Remove NodeJS, twice to take care of system and locally installed node versions. + sudo rm -rf $(which node) + sudo rm -rf $(which node) + + pip install "jupyterlab>=4.0.0b0,<5" jupyterlab_git*.whl + + + jupyter labextension list + jupyter labextension list 2>&1 | grep -ie "@jupyterlab/git.*OK" + python -m jupyterlab.browser_check --no-browser-test + + integration-tests: + name: Integration tests + needs: build + runs-on: ubuntu-latest + + env: + PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/pw-browsers + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Base Setup + uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + + - name: Download extension package + uses: actions/download-artifact@v3 + with: + name: extension-artifacts + + - name: Install the extension + run: | + set -eux + python -m pip install "jupyterlab>=4.0.0b0,<5" jupyterlab_git*.whl + + - name: Install dependencies + working-directory: ui-tests + env: + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 + run: jlpm install + + - name: Set up browser cache + uses: actions/cache@v3 + with: + path: | + ${{ github.workspace }}/pw-browsers + key: ${{ runner.os }}-${{ hashFiles('ui-tests/yarn.lock') }} + + - name: Install browser + run: jlpm playwright install chromium + working-directory: ui-tests + + - name: Execute integration tests + working-directory: ui-tests + run: | + jlpm playwright test + + - name: Upload Playwright Test report + if: always() + uses: actions/upload-artifact@v3 + with: + name: jupyterlab_git-playwright-tests + path: | + ui-tests/test-results + ui-tests/playwright-report + + check_links: + name: Check Links + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@v3 + - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + - uses: jupyterlab/maintainer-tools/.github/actions/check-links@v1 diff --git a/_temp_extension/.github/workflows/check-release.yml b/_temp_extension/.github/workflows/check-release.yml new file mode 100644 index 000000000..17353384a --- /dev/null +++ b/_temp_extension/.github/workflows/check-release.yml @@ -0,0 +1,29 @@ +name: Check Release +on: + push: + branches: ["main"] + pull_request: + branches: ["*"] + +jobs: + check_release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Base Setup + uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + - name: Install Dependencies + run: | + pip install -e . + - name: Check Release + uses: jupyter-server/jupyter_releaser/.github/actions/check-release@v2 + with: + + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload Distributions + uses: actions/upload-artifact@v3 + with: + name: jupyterlab_git-releaser-dist-${{ github.run_number }} + path: .jupyter_releaser_checkout/dist diff --git a/_temp_extension/.github/workflows/enforce-label.yml b/_temp_extension/.github/workflows/enforce-label.yml new file mode 100644 index 000000000..725feab5c --- /dev/null +++ b/_temp_extension/.github/workflows/enforce-label.yml @@ -0,0 +1,13 @@ +name: Enforce PR label + +on: + pull_request: + types: [labeled, unlabeled, opened, edited, synchronize] +jobs: + enforce-label: + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - name: enforce-triage-label + uses: jupyterlab/maintainer-tools/.github/actions/enforce-label@v1 diff --git a/_temp_extension/.github/workflows/prep-release.yml b/_temp_extension/.github/workflows/prep-release.yml new file mode 100644 index 000000000..4903ce376 --- /dev/null +++ b/_temp_extension/.github/workflows/prep-release.yml @@ -0,0 +1,44 @@ +name: "Step 1: Prep Release" +on: + workflow_dispatch: + inputs: + version_spec: + description: "New Version Specifier" + default: "next" + required: false + branch: + description: "The branch to target" + required: false + post_version_spec: + description: "Post Version Specifier" + required: false + since: + description: "Use PRs with activity since this date or git reference" + required: false + since_last_stable: + description: "Use PRs with activity since the last stable git tag" + required: false + type: boolean +jobs: + prep_release: + runs-on: ubuntu-latest + steps: + - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + + + - name: Prep Release + id: prep-release + uses: jupyter-server/jupyter_releaser/.github/actions/prep-release@v2 + with: + token: ${{ secrets.ADMIN_GITHUB_TOKEN }} + version_spec: ${{ github.event.inputs.version_spec }} + post_version_spec: ${{ github.event.inputs.post_version_spec }} + target: ${{ github.event.inputs.target }} + branch: ${{ github.event.inputs.branch }} + since: ${{ github.event.inputs.since }} + since_last_stable: ${{ github.event.inputs.since_last_stable }} + + - name: "** Next Step **" + run: | + echo "Optional): Review Draft Release: ${{ steps.prep-release.outputs.release_url }}" + diff --git a/_temp_extension/.github/workflows/publish-release.yml b/_temp_extension/.github/workflows/publish-release.yml new file mode 100644 index 000000000..2150ad451 --- /dev/null +++ b/_temp_extension/.github/workflows/publish-release.yml @@ -0,0 +1,56 @@ +name: "Step 2: Publish Release" +on: + workflow_dispatch: + inputs: + branch: + description: "The target branch" + required: false + release_url: + description: "The URL of the draft GitHub release" + required: false + steps_to_skip: + description: "Comma separated list of steps to skip" + required: false + +jobs: + publish_release: + runs-on: ubuntu-latest + steps: + - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + + + - name: Populate Release + id: populate-release + uses: jupyter-server/jupyter_releaser/.github/actions/populate-release@v2 + with: + token: ${{ secrets.ADMIN_GITHUB_TOKEN }} + target: ${{ github.event.inputs.target }} + branch: ${{ github.event.inputs.branch }} + release_url: ${{ github.event.inputs.release_url }} + steps_to_skip: ${{ github.event.inputs.steps_to_skip }} + + - name: Finalize Release + id: finalize-release + env: + PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} + PYPI_TOKEN_MAP: ${{ secrets.PYPI_TOKEN_MAP }} + TWINE_USERNAME: __token__ + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + uses: jupyter-server/jupyter-releaser/.github/actions/finalize-release@v2 + with: + token: ${{ secrets.ADMIN_GITHUB_TOKEN }} + target: ${{ github.event.inputs.target }} + release_url: ${{ steps.populate-release.outputs.release_url }} + + - name: "** Next Step **" + if: ${{ success() }} + run: | + echo "Verify the final release" + echo ${{ steps.finalize-release.outputs.release_url }} + + - name: "** Failure Message **" + if: ${{ failure() }} + run: | + echo "Failed to Publish the Draft Release Url:" + echo ${{ steps.populate-release.outputs.release_url }} + diff --git a/_temp_extension/.github/workflows/update-integration-tests.yml b/_temp_extension/.github/workflows/update-integration-tests.yml new file mode 100644 index 000000000..714fd6ff0 --- /dev/null +++ b/_temp_extension/.github/workflows/update-integration-tests.yml @@ -0,0 +1,50 @@ +name: Update Playwright Snapshots + +on: + issue_comment: + types: [created, edited] + +permissions: + contents: write + pull-requests: write + +jobs: + + + update-snapshots: + if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, 'please update playwright snapshots') }} + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Configure git to use https + run: git config --global hub.protocol https + + - name: Checkout the branch from the PR that triggered the job + run: hub pr checkout ${{ github.event.issue.number }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Base Setup + uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + + - name: Install dependencies + run: python -m pip install -U "jupyterlab>=4.0.0b0,<5" + + - name: Install extension + run: | + set -eux + jlpm + python -m pip install . + + - uses: jupyterlab/maintainer-tools/.github/actions/update-snapshots@v1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + # Playwright knows how to start JupyterLab server + start_server_script: 'null' + test_folder: ui-tests + diff --git a/_temp_extension/.gitignore b/_temp_extension/.gitignore new file mode 100644 index 000000000..ae58ed316 --- /dev/null +++ b/_temp_extension/.gitignore @@ -0,0 +1,125 @@ +*.bundle.* +lib/ +node_modules/ +*.log +.eslintcache +.stylelintcache +*.egg-info/ +.ipynb_checkpoints +*.tsbuildinfo +jupyterlab_git/labextension +# Version file is handled by hatchling +jupyterlab_git/_version.py + +# Integration tests +ui-tests/test-results/ +ui-tests/playwright-report/ + +# Created by https://www.gitignore.io/api/python +# Edit at https://www.gitignore.io/?templates=python + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage/ +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# End of https://www.gitignore.io/api/python + +# OSX files +.DS_Store + +# Yarn cache +.yarn/ diff --git a/_temp_extension/.prettierignore b/_temp_extension/.prettierignore new file mode 100644 index 000000000..c7b065072 --- /dev/null +++ b/_temp_extension/.prettierignore @@ -0,0 +1,6 @@ +node_modules +**/node_modules +**/lib +**/package.json +!/package.json +jupyterlab_git diff --git a/_temp_extension/.yarnrc.yml b/_temp_extension/.yarnrc.yml new file mode 100644 index 000000000..fe1125f54 --- /dev/null +++ b/_temp_extension/.yarnrc.yml @@ -0,0 +1,3 @@ +enableImmutableInstalls: false + +nodeLinker: node-modules diff --git a/_temp_extension/CHANGELOG.md b/_temp_extension/CHANGELOG.md new file mode 100644 index 000000000..2d352af42 --- /dev/null +++ b/_temp_extension/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + + + + diff --git a/_temp_extension/LICENSE b/_temp_extension/LICENSE new file mode 100644 index 000000000..3d314769e --- /dev/null +++ b/_temp_extension/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2023, Jupyter Development Team +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/_temp_extension/README.md b/_temp_extension/README.md new file mode 100644 index 000000000..cc96bfb6a --- /dev/null +++ b/_temp_extension/README.md @@ -0,0 +1,96 @@ +# jupyterlab_git + +[![Github Actions Status](https://github.com/jupyterlab/jupyterlab-git/workflows/Build/badge.svg)](https://github.com/jupyterlab/jupyterlab-git/actions/workflows/build.yml)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jupyterlab/jupyterlab-git/main?urlpath=lab) +A JupyterLab extension for version control using git + +## Requirements + +- JupyterLab >= 4.0.0b0 + +## Install + +To install the extension, execute: + +```bash +pip install jupyterlab_git +``` + +## Uninstall + +To remove the extension, execute: + +```bash +pip uninstall jupyterlab_git +``` + +## Contributing + +### Development install + +Note: You will need NodeJS to build the extension package. + +The `jlpm` command is JupyterLab's pinned version of +[yarn](https://yarnpkg.com/) that is installed with JupyterLab. You may use +`yarn` or `npm` in lieu of `jlpm` below. + +```bash +# Clone the repo to your local environment +# Change directory to the jupyterlab_git directory +# Install package in development mode +pip install -e "." +# Link your development version of the extension with JupyterLab +jupyter labextension develop . --overwrite +# Rebuild extension Typescript source after making changes +jlpm build +``` + +You can watch the source directory and run JupyterLab at the same time in different terminals to watch for changes in the extension's source and automatically rebuild the extension. + +```bash +# Watch the source directory in one terminal, automatically rebuilding when needed +jlpm watch +# Run JupyterLab in another terminal +jupyter lab +``` + +With the watch command running, every saved change will immediately be built locally and available in your running JupyterLab. Refresh JupyterLab to load the change in your browser (you may need to wait several seconds for the extension to be rebuilt). + +By default, the `jlpm build` command generates the source maps for this extension to make it easier to debug using the browser dev tools. To also generate source maps for the JupyterLab core extensions, you can run the following command: + +```bash +jupyter lab build --minimize=False +``` + +### Development uninstall + +```bash +pip uninstall jupyterlab_git +``` + +In development mode, you will also need to remove the symlink created by `jupyter labextension develop` +command. To find its location, you can run `jupyter labextension list` to figure out where the `labextensions` +folder is located. Then you can remove the symlink named `@jupyterlab/git` within that folder. + +### Testing the extension + +#### Frontend tests + +This extension is using [Jest](https://jestjs.io/) for JavaScript code testing. + +To execute them, execute: + +```sh +jlpm +jlpm test +``` + +#### Integration tests + +This extension uses [Playwright](https://playwright.dev/docs/intro/) for the integration tests (aka user level tests). +More precisely, the JupyterLab helper [Galata](https://github.com/jupyterlab/jupyterlab/tree/master/galata) is used to handle testing the extension in JupyterLab. + +More information are provided within the [ui-tests](./ui-tests/README.md) README. + +### Packaging the extension + +See [RELEASE](RELEASE.md) diff --git a/_temp_extension/RELEASE.md b/_temp_extension/RELEASE.md new file mode 100644 index 000000000..f0a990f76 --- /dev/null +++ b/_temp_extension/RELEASE.md @@ -0,0 +1,65 @@ +# Making a new release of jupyterlab_git + +The extension can be published to `PyPI` and `npm` manually or using the [Jupyter Releaser](https://github.com/jupyter-server/jupyter_releaser). + +## Manual release + +### Python package + +This extension can be distributed as Python packages. All of the Python +packaging instructions are in the `pyproject.toml` file to wrap your extension in a +Python package. Before generating a package, you first need to install some tools: + +```bash +pip install build twine hatch +``` + +Bump the version using `hatch`. By default this will create a tag. +See the docs on [hatch-nodejs-version](https://github.com/agoose77/hatch-nodejs-version#semver) for details. + +```bash +hatch version +``` + +To create a Python source package (`.tar.gz`) and the binary package (`.whl`) in the `dist/` directory, do: + +```bash +python -m build +``` + +> `python setup.py sdist bdist_wheel` is deprecated and will not work for this package. + +Then to upload the package to PyPI, do: + +```bash +twine upload dist/* +``` + +### NPM package + +To publish the frontend part of the extension as a NPM package, do: + +```bash +npm login +npm publish --access public +``` + +## Automated releases with the Jupyter Releaser + +The extension repository should already be compatible with the Jupyter Releaser. + +Check out the [workflow documentation](https://jupyter-releaser.readthedocs.io/en/latest/get_started/making_release_from_repo.html) for more information. + +Here is a summary of the steps to cut a new release: + +- Add `ADMIN_GITHUB_TOKEN`, `PYPI_TOKEN` and `NPM_TOKEN` to the [Github Secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) in the repository +- Go to the Actions panel +- Run the "Step 1: Prep Release" workflow +- Check the draft changelog +- Run the "Step 2: Publish Release" workflow + +## Publishing to `conda-forge` + +If the package is not on conda forge yet, check the documentation to learn how to add it: https://conda-forge.org/docs/maintainer/adding_pkgs.html + +Otherwise a bot should pick up the new version publish to PyPI, and open a new PR on the feedstock repository automatically. diff --git a/_temp_extension/babel.config.js b/_temp_extension/babel.config.js new file mode 100644 index 000000000..8b5c76420 --- /dev/null +++ b/_temp_extension/babel.config.js @@ -0,0 +1 @@ +module.exports = require('@jupyterlab/testutils/lib/babel.config'); diff --git a/_temp_extension/binder/environment.yml b/_temp_extension/binder/environment.yml new file mode 100644 index 000000000..574887423 --- /dev/null +++ b/_temp_extension/binder/environment.yml @@ -0,0 +1,21 @@ +# a mybinder.org-ready environment for demoing jupyterlab_git +# this environment may also be used locally on Linux/MacOS/Windows, e.g. +# +# conda env update --file binder/environment.yml +# conda activate jupyterlab-git-demo +# +name: jupyterlab-git-demo + +channels: + - conda-forge + +dependencies: + # runtime dependencies + - python >=3.10,<3.11.0a0 + - jupyterlab >=4.0.0b0,<5 + # labextension build dependencies + - nodejs >=18,<19 + - pip + - wheel + # additional packages for demos + # - ipywidgets diff --git a/_temp_extension/binder/postBuild b/_temp_extension/binder/postBuild new file mode 100755 index 000000000..53e086339 --- /dev/null +++ b/_temp_extension/binder/postBuild @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +""" perform a development install of jupyterlab_git + + On Binder, this will run _after_ the environment has been fully created from + the environment.yml in this directory. + + This script should also run locally on Linux/MacOS/Windows: + + python3 binder/postBuild +""" +import subprocess +import sys +from pathlib import Path + + +ROOT = Path.cwd() + +def _(*args, **kwargs): + """ Run a command, echoing the args + + fails hard if something goes wrong + """ + print("\n\t", " ".join(args), "\n") + return_code = subprocess.call(args, **kwargs) + if return_code != 0: + print("\nERROR", return_code, " ".join(args)) + sys.exit(return_code) + +# verify the environment is self-consistent before even starting +_(sys.executable, "-m", "pip", "check") + +# install the labextension +_(sys.executable, "-m", "pip", "install", "-e", ".") +_(sys.executable, "-m", "jupyter", "labextension", "develop", "--overwrite", ".") + +# verify the environment the extension didn't break anything +_(sys.executable, "-m", "pip", "check") + +# list the extensions +_("jupyter", "server", "extension", "list") + +# initially list installed extensions to determine if there are any surprises +_("jupyter", "labextension", "list") + + +print("JupyterLab with jupyterlab_git is ready to run with:\n") +print("\tjupyter lab\n") diff --git a/_temp_extension/install.json b/_temp_extension/install.json new file mode 100644 index 000000000..55ce3e46d --- /dev/null +++ b/_temp_extension/install.json @@ -0,0 +1,5 @@ +{ + "packageManager": "python", + "packageName": "jupyterlab_git", + "uninstallInstructions": "Use your Python package manager (pip, conda, etc.) to uninstall the package jupyterlab_git" +} diff --git a/_temp_extension/jest.config.js b/_temp_extension/jest.config.js new file mode 100644 index 000000000..38993844e --- /dev/null +++ b/_temp_extension/jest.config.js @@ -0,0 +1,21 @@ +const jestJupyterLab = require('@jupyterlab/testutils/lib/jest-config'); + +const esModules = ['@jupyterlab/'].join('|'); + +const baseConfig = jestJupyterLab(__dirname); + +module.exports = { + ...baseConfig, + automock: false, + collectCoverageFrom: [ + 'src/**/*.{ts,tsx}', + '!src/**/*.d.ts', + '!src/**/.ipynb_checkpoints/*' + ], + coverageReporters: ['lcov', 'text'], + testRegex: 'src/.*/.*.spec.ts[x]?$', + transformIgnorePatterns: [ + ...baseConfig.transformIgnorePatterns, + `/node_modules/(?!${esModules}).+` + ] +}; diff --git a/_temp_extension/jupyterlab_git/__init__.py b/_temp_extension/jupyterlab_git/__init__.py new file mode 100644 index 000000000..04e3ff723 --- /dev/null +++ b/_temp_extension/jupyterlab_git/__init__.py @@ -0,0 +1,9 @@ +from ._version import __version__ + + +def _jupyter_labextension_paths(): + return [{ + "src": "labextension", + "dest": "@jupyterlab/git" + }] + diff --git a/_temp_extension/package.json b/_temp_extension/package.json new file mode 100644 index 000000000..73e260195 --- /dev/null +++ b/_temp_extension/package.json @@ -0,0 +1,185 @@ +{ + "name": "@jupyterlab/git", + "version": "0.1.0", + "description": "A JupyterLab extension for version control using git", + "keywords": [ + "jupyter", + "jupyterlab", + "jupyterlab-extension" + ], + "homepage": "https://github.com/jupyterlab/jupyterlab-git", + "bugs": { + "url": "https://github.com/jupyterlab/jupyterlab-git/issues" + }, + "license": "BSD-3-Clause", + "author": { + "name": "Jupyter Development Team", + "email": "" + }, + "files": [ + "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "schema/*.json" + ], + "main": "lib/index.js", + "types": "lib/index.d.ts", + "style": "style/index.css", + "repository": { + "type": "git", + "url": "https://github.com/jupyterlab/jupyterlab-git.git" + }, + "workspaces": [ + "ui-tests" + ], + "scripts": { + "build": "jlpm build:lib && jlpm build:labextension:dev", + "build:prod": "jlpm clean && jlpm build:lib:prod && jlpm build:labextension", + "build:labextension": "jupyter labextension build .", + "build:labextension:dev": "jupyter labextension build --development True .", + "build:lib": "tsc --sourceMap", + "build:lib:prod": "tsc", + "clean": "jlpm clean:lib", + "clean:lib": "rimraf lib tsconfig.tsbuildinfo", + "clean:lintcache": "rimraf .eslintcache .stylelintcache", + "clean:labextension": "rimraf jupyterlab_git/labextension jupyterlab_git/_version.py", + "clean:all": "jlpm clean:lib && jlpm clean:labextension && jlpm clean:lintcache", + "eslint": "jlpm eslint:check --fix", + "eslint:check": "eslint . --cache --ext .ts,.tsx", + "install:extension": "jlpm build", + "lint": "jlpm stylelint && jlpm prettier && jlpm eslint", + "lint:check": "jlpm stylelint:check && jlpm prettier:check && jlpm eslint:check", + "prettier": "jlpm prettier:base --write --list-different", + "prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.md}\"", + "prettier:check": "jlpm prettier:base --check", + "stylelint": "jlpm stylelint:check --fix", + "stylelint:check": "stylelint --cache \"style/**/*.css\"", + "test": "jest --coverage", + "watch": "run-p watch:src watch:labextension", + "watch:src": "tsc -w", + "watch:labextension": "jupyter labextension watch ." + }, + "dependencies": { + "@jupyterlab/application": "^4.0.0-beta.0", + "@jupyterlab/settingregistry": "^4.0.0-beta.0" + }, + "devDependencies": { + "@jupyterlab/builder": "^4.0.0-beta.0", + "@jupyterlab/testutils": "^4.0.0-beta.0", + "@types/jest": "^29.2.0", + "@types/json-schema": "^7.0.11", + "@types/react": "^18.0.26", + "@typescript-eslint/eslint-plugin": "^5.55.0", + "@typescript-eslint/parser": "^5.55.0", + "css-loader": "^6.7.1", + "eslint": "^8.36.0", + "eslint-config-prettier": "^8.7.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.2.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.7", + "rimraf": "^4.4.1", + "source-map-loader": "^1.0.2", + "style-loader": "^3.3.1", + "stylelint": "^14.9.1", + "stylelint-config-prettier": "^9.0.4", + "stylelint-config-recommended": "^8.0.0", + "stylelint-config-standard": "^26.0.0", + "stylelint-prettier": "^2.0.0", + "typescript": "~5.0.2", + "yjs": "^13.5.0" + }, + "sideEffects": [ + "style/*.css", + "style/index.js" + ], + "styleModule": "style/index.js", + "publishConfig": { + "access": "public" + }, + "jupyterlab": { + "extension": true, + "outputDir": "jupyterlab_git/labextension", + "schemaDir": "schema" + }, + "eslintIgnore": [ + "node_modules", + "dist", + "coverage", + "**/*.d.ts", + "tests", + "**/__tests__", + "ui-tests" + ], + "eslintConfig": { + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "tsconfig.json", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "interface", + "format": [ + "PascalCase" + ], + "custom": { + "regex": "^I[A-Z]", + "match": true + } + } + ], + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "args": "none" + } + ], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/quotes": [ + "error", + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": false + } + ], + "curly": [ + "error", + "all" + ], + "eqeqeq": "error", + "prefer-arrow-callback": "error" + } + }, + "prettier": { + "singleQuote": true, + "trailingComma": "none", + "arrowParens": "avoid", + "endOfLine": "auto" + }, + "stylelint": { + "extends": [ + "stylelint-config-recommended", + "stylelint-config-standard", + "stylelint-prettier/recommended" + ], + "rules": { + "property-no-vendor-prefix": null, + "selector-no-vendor-prefix": null, + "value-no-vendor-prefix": null + } + } +} diff --git a/_temp_extension/pyproject.toml b/_temp_extension/pyproject.toml new file mode 100644 index 000000000..c55078ac7 --- /dev/null +++ b/_temp_extension/pyproject.toml @@ -0,0 +1,76 @@ +[build-system] +requires = ["hatchling>=1.5.0", "jupyterlab>=4.0.0b0,<5", "hatch-nodejs-version"] +build-backend = "hatchling.build" + +[project] +name = "jupyterlab_git" +readme = "README.md" +license = { file = "LICENSE" } +requires-python = ">=3.8" +classifiers = [ + "Framework :: Jupyter", + "Framework :: Jupyter :: JupyterLab", + "Framework :: Jupyter :: JupyterLab :: 4", + "Framework :: Jupyter :: JupyterLab :: Extensions", + "Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt", + "License :: OSI Approved :: BSD License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", +] +dependencies = [ +] +dynamic = ["version", "description", "authors", "urls", "keywords"] + +[tool.hatch.version] +source = "nodejs" + +[tool.hatch.metadata.hooks.nodejs] +fields = ["description", "authors", "urls"] + +[tool.hatch.build.targets.sdist] +artifacts = ["jupyterlab_git/labextension"] +exclude = [".github", "binder"] + +[tool.hatch.build.targets.wheel.shared-data] +"jupyterlab_git/labextension" = "share/jupyter/labextensions/@jupyterlab/git" +"install.json" = "share/jupyter/labextensions/@jupyterlab/git/install.json" + +[tool.hatch.build.hooks.version] +path = "jupyterlab_git/_version.py" + +[tool.hatch.build.hooks.jupyter-builder] +dependencies = ["hatch-jupyter-builder>=0.5"] +build-function = "hatch_jupyter_builder.npm_builder" +ensured-targets = [ + "jupyterlab_git/labextension/static/style.js", + "jupyterlab_git/labextension/package.json", +] +skip-if-exists = ["jupyterlab_git/labextension/static/style.js"] + +[tool.hatch.build.hooks.jupyter-builder.build-kwargs] +build_cmd = "build:prod" +npm = ["jlpm"] + +[tool.hatch.build.hooks.jupyter-builder.editable-build-kwargs] +build_cmd = "install:extension" +npm = ["jlpm"] +source_dir = "src" +build_dir = "jupyterlab_git/labextension" + +[tool.jupyter-releaser.options] +version_cmd = "hatch version" + +[tool.jupyter-releaser.hooks] +before-build-npm = [ + "python -m pip install 'jupyterlab>=4.0.0b0,<5'", + "jlpm", + "jlpm build:prod" +] +before-build-python = ["jlpm clean:all"] + +[tool.check-wheel-contents] +ignore = ["W002"] diff --git a/_temp_extension/schema/plugin.json b/_temp_extension/schema/plugin.json new file mode 100644 index 000000000..a6a5dba21 --- /dev/null +++ b/_temp_extension/schema/plugin.json @@ -0,0 +1,8 @@ +{ + "jupyter.lab.shortcuts": [], + "title": "@jupyterlab/git", + "description": "@jupyterlab/git settings.", + "type": "object", + "properties": {}, + "additionalProperties": false +} diff --git a/_temp_extension/setup.py b/_temp_extension/setup.py new file mode 100644 index 000000000..bea233743 --- /dev/null +++ b/_temp_extension/setup.py @@ -0,0 +1 @@ +__import__('setuptools').setup() diff --git a/_temp_extension/src/__tests__/jupyterlab_git.spec.ts b/_temp_extension/src/__tests__/jupyterlab_git.spec.ts new file mode 100644 index 000000000..3fd2729a7 --- /dev/null +++ b/_temp_extension/src/__tests__/jupyterlab_git.spec.ts @@ -0,0 +1,9 @@ +/** + * Example of [Jest](https://jestjs.io/docs/getting-started) unit tests + */ + +describe('@jupyterlab/git', () => { + it('should be tested', () => { + expect(1 + 1).toEqual(2); + }); +}); diff --git a/_temp_extension/src/index.ts b/_temp_extension/src/index.ts new file mode 100644 index 000000000..66097408f --- /dev/null +++ b/_temp_extension/src/index.ts @@ -0,0 +1,34 @@ +import { + JupyterFrontEnd, + JupyterFrontEndPlugin +} from '@jupyterlab/application'; + +import { ISettingRegistry } from '@jupyterlab/settingregistry'; + +/** + * Initialization data for the @jupyterlab/git extension. + */ +const plugin: JupyterFrontEndPlugin = { + id: '@jupyterlab/git:plugin', + autoStart: true, + optional: [ISettingRegistry], + activate: ( + app: JupyterFrontEnd, + settingRegistry: ISettingRegistry | null + ) => { + console.log('JupyterLab extension @jupyterlab/git is activated!'); + + if (settingRegistry) { + settingRegistry + .load(plugin.id) + .then(settings => { + console.log('@jupyterlab/git settings loaded:', settings.composite); + }) + .catch(reason => { + console.error('Failed to load settings for @jupyterlab/git.', reason); + }); + } + } +}; + +export default plugin; diff --git a/_temp_extension/style/base.css b/_temp_extension/style/base.css new file mode 100644 index 000000000..e11f45777 --- /dev/null +++ b/_temp_extension/style/base.css @@ -0,0 +1,5 @@ +/* + See the JupyterLab Developer Guide for useful CSS Patterns: + + https://jupyterlab.readthedocs.io/en/stable/developer/css.html +*/ diff --git a/_temp_extension/style/index.css b/_temp_extension/style/index.css new file mode 100644 index 000000000..e98119b5b --- /dev/null +++ b/_temp_extension/style/index.css @@ -0,0 +1 @@ +@import 'base.css'; diff --git a/_temp_extension/style/index.js b/_temp_extension/style/index.js new file mode 100644 index 000000000..a028a7640 --- /dev/null +++ b/_temp_extension/style/index.js @@ -0,0 +1 @@ +import './base.css'; diff --git a/_temp_extension/tsconfig.json b/_temp_extension/tsconfig.json new file mode 100644 index 000000000..4f3547dad --- /dev/null +++ b/_temp_extension/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "composite": true, + "declaration": true, + "esModuleInterop": true, + "incremental": true, + "jsx": "react", + "module": "esnext", + "moduleResolution": "node", + "noEmitOnError": true, + "noImplicitAny": true, + "noUnusedLocals": true, + "preserveWatchOutput": true, + "resolveJsonModule": true, + "outDir": "lib", + "rootDir": "src", + "strict": true, + "strictNullChecks": true, + "target": "ES2018", + "types": ["jest"] + }, + "include": ["src/*"] +} diff --git a/_temp_extension/tsconfig.test.json b/_temp_extension/tsconfig.test.json new file mode 100644 index 000000000..1c66acf6d --- /dev/null +++ b/_temp_extension/tsconfig.test.json @@ -0,0 +1,3 @@ +{ + "extends": "./tsconfig" +} diff --git a/_temp_extension/ui-tests/README.md b/_temp_extension/ui-tests/README.md new file mode 100644 index 000000000..3544aec4e --- /dev/null +++ b/_temp_extension/ui-tests/README.md @@ -0,0 +1,148 @@ +# Integration Testing + +This folder contains the integration tests of the extension. + +They are defined using [Playwright](https://playwright.dev/docs/intro) test runner +and [Galata](https://github.com/jupyterlab/jupyterlab/tree/master/galata) helper. + +The Playwright configuration is defined in [playwright.config.js](./playwright.config.js). + +The JupyterLab server configuration to use for the integration test is defined +in [jupyter_server_test_config.py](./jupyter_server_test_config.py). + +The default configuration will produce video for failing tests and an HTML report. + +## Run the tests + +> All commands are assumed to be executed from the root directory + +To run the tests, you need to: + +1. Compile the extension: + +```sh +jlpm install +jlpm build:prod +``` + +> Check the extension is installed in JupyterLab. + +2. Install test dependencies (needed only once): + +```sh +cd ./ui-tests +jlpm install +jlpm playwright install +cd .. +``` + +3. Execute the [Playwright](https://playwright.dev/docs/intro) tests: + +```sh +cd ./ui-tests +jlpm playwright test +``` + +Test results will be shown in the terminal. In case of any test failures, the test report +will be opened in your browser at the end of the tests execution; see +[Playwright documentation](https://playwright.dev/docs/test-reporters#html-reporter) +for configuring that behavior. + +## Update the tests snapshots + +> All commands are assumed to be executed from the root directory + +If you are comparing snapshots to validate your tests, you may need to update +the reference snapshots stored in the repository. To do that, you need to: + +1. Compile the extension: + +```sh +jlpm install +jlpm build:prod +``` + +> Check the extension is installed in JupyterLab. + +2. Install test dependencies (needed only once): + +```sh +cd ./ui-tests +jlpm install +jlpm playwright install +cd .. +``` + +3. Execute the [Playwright](https://playwright.dev/docs/intro) command: + +```sh +cd ./ui-tests +jlpm playwright test -u +``` + +> Some discrepancy may occurs between the snapshots generated on your computer and +> the one generated on the CI. To ease updating the snapshots on a PR, you can +> type `please update playwright snapshots` to trigger the update by a bot on the CI. +> Once the bot has computed new snapshots, it will commit them to the PR branch. + +## Create tests + +> All commands are assumed to be executed from the root directory + +To create tests, the easiest way is to use the code generator tool of playwright: + +1. Compile the extension: + +```sh +jlpm install +jlpm build:prod +``` + +> Check the extension is installed in JupyterLab. + +2. Install test dependencies (needed only once): + +```sh +cd ./ui-tests +jlpm install +jlpm playwright install +cd .. +``` + +3. Execute the [Playwright code generator](https://playwright.dev/docs/codegen): + +```sh +cd ./ui-tests +jlpm playwright codegen localhost:8888 +``` + +## Debug tests + +> All commands are assumed to be executed from the root directory + +To debug tests, a good way is to use the inspector tool of playwright: + +1. Compile the extension: + +```sh +jlpm install +jlpm build:prod +``` + +> Check the extension is installed in JupyterLab. + +2. Install test dependencies (needed only once): + +```sh +cd ./ui-tests +jlpm install +jlpm playwright install +cd .. +``` + +3. Execute the Playwright tests in [debug mode](https://playwright.dev/docs/debug): + +```sh +cd ./ui-tests +PWDEBUG=1 jlpm playwright test +``` diff --git a/_temp_extension/ui-tests/jupyter_server_test_config.py b/_temp_extension/ui-tests/jupyter_server_test_config.py new file mode 100644 index 000000000..f2a94782a --- /dev/null +++ b/_temp_extension/ui-tests/jupyter_server_test_config.py @@ -0,0 +1,12 @@ +"""Server configuration for integration tests. + +!! Never use this configuration in production because it +opens the server to the world and provide access to JupyterLab +JavaScript objects through the global window variable. +""" +from jupyterlab.galata import configure_jupyter_server + +configure_jupyter_server(c) + +# Uncomment to set server log level to debug level +# c.ServerApp.log_level = "DEBUG" diff --git a/_temp_extension/ui-tests/package.json b/_temp_extension/ui-tests/package.json new file mode 100644 index 000000000..42cb34ba5 --- /dev/null +++ b/_temp_extension/ui-tests/package.json @@ -0,0 +1,15 @@ +{ + "name": "@jupyterlab/git-ui-tests", + "version": "1.0.0", + "description": "JupyterLab @jupyterlab/git Integration Tests", + "private": true, + "scripts": { + "start": "jupyter lab --config jupyter_server_test_config.py", + "test": "jlpm playwright test", + "test:update": "jlpm playwright test --update-snapshots" + }, + "devDependencies": { + "@jupyterlab/galata": "^5.0.0-beta.0", + "@playwright/test": "^1.31.0" + } +} diff --git a/_temp_extension/ui-tests/playwright.config.js b/_temp_extension/ui-tests/playwright.config.js new file mode 100644 index 000000000..9ece6fa11 --- /dev/null +++ b/_temp_extension/ui-tests/playwright.config.js @@ -0,0 +1,14 @@ +/** + * Configuration for Playwright using default from @jupyterlab/galata + */ +const baseConfig = require('@jupyterlab/galata/lib/playwright-config'); + +module.exports = { + ...baseConfig, + webServer: { + command: 'jlpm start', + url: 'http://localhost:8888/lab', + timeout: 120 * 1000, + reuseExistingServer: !process.env.CI + } +}; diff --git a/_temp_extension/ui-tests/tests/jupyterlab_git.spec.ts b/_temp_extension/ui-tests/tests/jupyterlab_git.spec.ts new file mode 100644 index 000000000..c60ae7247 --- /dev/null +++ b/_temp_extension/ui-tests/tests/jupyterlab_git.spec.ts @@ -0,0 +1,21 @@ +import { expect, test } from '@jupyterlab/galata'; + +/** + * Don't load JupyterLab webpage before running the tests. + * This is required to ensure we capture all log messages. + */ +test.use({ autoGoto: false }); + +test('should emit an activation console message', async ({ page }) => { + const logs: string[] = []; + + page.on('console', message => { + logs.push(message.text()); + }); + + await page.goto(); + + expect( + logs.filter(s => s === 'JupyterLab extension @jupyterlab/git is activated!') + ).toHaveLength(1); +}); diff --git a/_temp_extension/ui-tests/yarn.lock b/_temp_extension/ui-tests/yarn.lock new file mode 100644 index 000000000..e69de29bb diff --git a/binder/environment.yml b/binder/environment.yml index c8aef7a66..574887423 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -11,11 +11,11 @@ channels: dependencies: # runtime dependencies - - python >=3.8,<3.9.0a0 - - jupyterlab >=3,<4.0.0a0 + - python >=3.10,<3.11.0a0 + - jupyterlab >=4.0.0b0,<5 # labextension build dependencies - nodejs >=18,<19 - pip - wheel # additional packages for demos - - nbgitpuller + # - ipywidgets diff --git a/binder/postBuild b/binder/postBuild index f00d920ee..06a528c4a 100755 --- a/binder/postBuild +++ b/binder/postBuild @@ -34,14 +34,6 @@ _(sys.executable, "-m", "pip", "check") # install the labextension _(sys.executable, "-m", "pip", "install", "-e", ".") _(sys.executable, "-m", "jupyter", "labextension", "develop", "--overwrite", ".") -_( - sys.executable, - "-m", - "jupyter", - "serverextension", - "enable", - "jupyterlab_git", -) _( sys.executable, "-m", diff --git a/install.json b/install.json index 576ea253a..55ce3e46d 100644 --- a/install.json +++ b/install.json @@ -1,5 +1,5 @@ { "packageManager": "python", - "packageName": "jupyterlab-git", - "uninstallInstructions": "Use your Python package manager (pip, conda, etc.) to uninstall the package jupyterlab-git" + "packageName": "jupyterlab_git", + "uninstallInstructions": "Use your Python package manager (pip, conda, etc.) to uninstall the package jupyterlab_git" } diff --git a/jest.config.js b/jest.config.js index 2975c90d0..65cfbd281 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,13 +1,6 @@ const jestJupyterLab = require('@jupyterlab/testutils/lib/jest-config'); -const esModules = [ - '.*@jupyterlab/', - '@jupyter/ydoc', - 'lib0', - 'y\\-protocols', - 'y\\-websocket', - 'yjs' -].join('|'); +const baseConfig = jestJupyterLab(__dirname); const jlabConfig = jestJupyterLab(__dirname); diff --git a/pyproject.toml b/pyproject.toml index 6ca87d8f1..c7d866039 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,55 +1,30 @@ [build-system] -requires = ["hatchling>=1.4.0", "jupyterlab>=3.4.7,<4.0.0", "hatch-nodejs-version"] +requires = ["hatchling>=1.5.0", "jupyterlab>=4.0.0b0,<5", "hatch-nodejs-version"] build-backend = "hatchling.build" [project] name = "jupyterlab_git" readme = "README.md" license = { file = "LICENSE" } -requires-python = ">=3.7" +requires-python = ">=3.8" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", - "Framework :: Jupyter :: JupyterLab :: 3", + "Framework :: Jupyter :: JupyterLab :: 4", "Framework :: Jupyter :: JupyterLab :: Extensions", "Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", ] dependencies = [ - "jupyter_server>=1.21,<3", - "nbdime~=3.1", - "nbformat", - "packaging", - "pexpect", - "traitlets~=5.0", ] dynamic = ["version", "description", "authors", "urls", "keywords"] -[project.optional-dependencies] -dev = [ - "black", - "jupyterlab~=3.0", - "pre-commit" -] -test = [ - "coverage", - "pytest", - "pytest-asyncio", - "pytest-cov", - "pytest-jupyter[server]>=0.6.0", - "hybridcontents", - "jupytext", -] -ui-tests = [ - "jupyter-archive" -] - [tool.hatch.version] source = "nodejs" @@ -92,7 +67,11 @@ build_dir = "jupyterlab_git/labextension" version_cmd = "hatch version" [tool.jupyter-releaser.hooks] -before-build-npm = ["python -m pip install jupyterlab~=3.1", "jlpm", "jlpm build:prod"] +before-build-npm = [ + "python -m pip install 'jupyterlab>=4.0.0b0,<5'", + "jlpm", + "jlpm build:prod" +] before-build-python = ["jlpm clean:all"] [tool.check-wheel-contents] diff --git a/src/__tests__/test-components/FileItem.spec.tsx b/src/__tests__/test-components/FileItem.spec.tsx index 44714f5e1..f6969a9aa 100644 --- a/src/__tests__/test-components/FileItem.spec.tsx +++ b/src/__tests__/test-components/FileItem.spec.tsx @@ -1,5 +1,4 @@ -/* eslint-disable @typescript-eslint/no-empty-function */ -import { FileItem, IFileItemProps } from '../../components/FileItem'; +import { FileItem, IFileItemProps } from '../../src/components/FileItem'; import * as React from 'react'; import 'jest'; import { shallow } from 'enzyme'; diff --git a/src/cloneCommand.ts b/src/cloneCommand.ts index 6c4252e36..491ae1c24 100644 --- a/src/cloneCommand.ts +++ b/src/cloneCommand.ts @@ -30,7 +30,7 @@ export const gitCloneCommandPlugin: JupyterFrontEndPlugin = { ) => { translator = translator ?? nullTranslator; const trans = translator.load('jupyterlab_git'); - const fileBrowser = fileBrowserFactory.defaultBrowser; + const fileBrowser = fileBrowserFactory.createFileBrowser('id'); const fileBrowserModel = fileBrowser.model; /** Add git clone command */ app.commands.addCommand(CommandIDs.gitClone, { diff --git a/src/commandsAndMenu.tsx b/src/commandsAndMenu.tsx index a7ef3e778..dfa0ff0eb 100644 --- a/src/commandsAndMenu.tsx +++ b/src/commandsAndMenu.tsx @@ -516,8 +516,8 @@ export function addCommands( ); logger.log({ message: trans.__('Reset failed'), - level: Level.ERROR, - error + level: Level.ERROR + /*error*/ }); } } @@ -553,7 +553,7 @@ export function addCommands( if (buildDiffWidget) { const id = `git-diff-${fullPath}-${model.reference.label}-${model.challenger.label}`; const mainAreaItems = shell.widgets('main'); - let mainAreaItem = mainAreaItems.next(); + let mainAreaItem = mainAreaItems.next().value; while (mainAreaItem) { if (mainAreaItem.id === id) { shell.activateById(id); @@ -1055,7 +1055,7 @@ export function addCommands( return; } - const matches = toArray(shell.widgets('main')).filter( + const matches = Array.from(shell.widgets('main')).filter( widget => widget.id === domNode.dataset.id ); @@ -1382,7 +1382,7 @@ export function addCommands( await app.commands.execute('docmanager:delete-file', { path: gitModel.getRelativeFilePath(file.to) }); - } catch (reason) { + } catch (reason: any) { showErrorMessage(trans.__('Deleting %1 failed.', file.to), reason, [ Dialog.warnButton({ label: trans.__('Dismiss') }) ]); @@ -1435,7 +1435,7 @@ export function addCommands( // resetting an added file moves it to untracked category => checkout will fail await gitModel.checkout({ filename: file.to }); } - } catch (reason) { + } catch (reason: any) { showErrorMessage( trans.__('Discard changes for %1 failed.', file.to), reason, @@ -1749,7 +1749,7 @@ export function addFileBrowserContextMenu( const wasShown = menu.isVisible; const parent = menu.parentMenu; - const items = toArray(filebrowser.selectedItems()); + const items = toArray(filebrowser.selectedItems().next().value); const statuses = new Set( items .map(item => diff --git a/src/components/CommitComparisonBox.tsx b/src/components/CommitComparisonBox.tsx index 6c113b633..fe03c2eeb 100644 --- a/src/components/CommitComparisonBox.tsx +++ b/src/components/CommitComparisonBox.tsx @@ -115,7 +115,7 @@ export function CommitComparisonBox( if (diffResult.code !== 0) { throw new Error(diffResult.message); } - } catch (err) { + } catch (err: any) { const msg = `Failed to get the diff for ${referenceCommit.commit} and ${challengerCommit.commit}.`; console.error(msg, err); props.logger.log({ diff --git a/src/components/FileList.tsx b/src/components/FileList.tsx index a24c40a16..8ac334655 100644 --- a/src/components/FileList.tsx +++ b/src/components/FileList.tsx @@ -261,7 +261,7 @@ export class FileList extends React.Component { if (result.button.accept) { try { await this.props.model.checkout(); - } catch (reason) { + } catch (reason: any) { showErrorMessage( this.props.trans.__('Discard all unstaged changes failed.'), reason diff --git a/src/components/GitPanel.tsx b/src/components/GitPanel.tsx index 60fe8e584..c12560aa6 100644 --- a/src/components/GitPanel.tsx +++ b/src/components/GitPanel.tsx @@ -816,7 +816,7 @@ export class GitPanel extends React.Component { if (this.props.settings.composite['commitAndPush'] && hasRemote) { await this.props.commands.execute(CommandIDs.gitPush); } - } catch (error) { + } catch (error: any) { this.props.logger.log({ ...errorLog, error }); throw error; } diff --git a/src/components/ManageRemoteDialogue.tsx b/src/components/ManageRemoteDialogue.tsx index 1d1c94917..6c101a40a 100644 --- a/src/components/ManageRemoteDialogue.tsx +++ b/src/components/ManageRemoteDialogue.tsx @@ -170,7 +170,7 @@ export class ManageRemoteDialogue extends React.Component< ], newRemote: { name: '', url: '' } })); - } catch (error) { + } catch (error: any) { console.error(error); showErrorMessage( this.props.trans.__('Error when adding remote repository'), diff --git a/src/components/NewBranchDialog.tsx b/src/components/NewBranchDialog.tsx index e78a51e83..a758765c7 100644 --- a/src/components/NewBranchDialog.tsx +++ b/src/components/NewBranchDialog.tsx @@ -428,7 +428,7 @@ export class NewBranchDialog extends React.Component< }); try { await this.props.model.checkout(opts); - } catch (err) { + } catch (err: any) { this.setState({ error: err.message.replace(/^fatal:/, '') }); diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index 0180b9e3f..d92d2d1e6 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -437,7 +437,7 @@ export class Toolbar extends React.Component { level: Level.SUCCESS, message: this.props.trans.__('Successfully refreshed.') }); - } catch (error) { + } catch (error: any) { console.error(error); this.props.logger.log({ level: Level.ERROR, diff --git a/src/components/diff/PlainTextDiff.ts b/src/components/diff/PlainTextDiff.ts index 107c21bbb..cea79e279 100644 --- a/src/components/diff/PlainTextDiff.ts +++ b/src/components/diff/PlainTextDiff.ts @@ -1,5 +1,5 @@ import { Toolbar } from '@jupyterlab/apputils'; -import { Mode } from '@jupyterlab/codemirror'; +import { EditorLanguageRegistry } from '@jupyterlab/codemirror'; import { Contents } from '@jupyterlab/services'; import { ITranslator, @@ -164,6 +164,7 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { this._challenger, this._reference, this._translations, + this._languageRegistry, this._hasConflict ? this._base : null ); } @@ -207,6 +208,7 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { this._challenger, this._reference, this._translations, + this._languageRegistry, this._hasConflict ? this._base : null ); @@ -247,12 +249,13 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { challengerContent: string, referenceContent: string, translations: Record, + languageRegistry: EditorLanguageRegistry, baseContent?: string ): Promise { if (!this._mergeView) { const mode = - Mode.findByFileName(this._model.filename) || - Mode.findBest(this._model.filename); + languageRegistry.findByFileName(this._model.filename) || + languageRegistry.findBest(this._model.filename); let options: LocalMergeView.IMergeViewEditorConfiguration = { value: challengerContent, @@ -323,5 +326,6 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { private _reference: string | null = null; private _challenger: string | null = null; + private _languageRegistry: EditorLanguageRegistry | null = null; private _base: string | null = null; } diff --git a/src/git.ts b/src/git.ts index f54fac670..1692e7e3a 100644 --- a/src/git.ts +++ b/src/git.ts @@ -47,7 +47,7 @@ export async function requestAPI( let response: Response; try { response = await ServerConnection.makeRequest(requestUrl, init, settings); - } catch (error) { + } catch (error: any) { throw new ServerConnection.NetworkError(error); } diff --git a/src/handler.ts b/src/handler.ts new file mode 100644 index 000000000..04d81241e --- /dev/null +++ b/src/handler.ts @@ -0,0 +1,46 @@ +import { URLExt } from '@jupyterlab/coreutils'; + +import { ServerConnection } from '@jupyterlab/services'; + +/** + * Call the API extension + * + * @param endPoint API REST end point for the extension + * @param init Initial values for the request + * @returns The response body interpreted as JSON + */ +export async function requestAPI( + endPoint = '', + init: RequestInit = {} +): Promise { + // Make request to Jupyter API + const settings = ServerConnection.makeSettings(); + const requestUrl = URLExt.join( + settings.baseUrl, + 'jupyterlab-git', // API Namespace + endPoint + ); + + let response: Response; + try { + response = await ServerConnection.makeRequest(requestUrl, init, settings); + } catch (error) { + throw new ServerConnection.NetworkError(error as any); + } + + let data: any = await response.text(); + + if (data.length > 0) { + try { + data = JSON.parse(data); + } catch (error) { + console.log('Not a JSON response body.', response); + } + } + + if (!response.ok) { + throw new ServerConnection.ResponseError(response, data.message || data); + } + + return data; +} diff --git a/src/index.ts b/src/index.ts index a77e2be34..38baddaf1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -85,7 +85,7 @@ async function activate( // or jupyterlab-gitlab are defining new filebrowsers that we don't support. // And it is unlikely that another browser than the default will be used. // Ref: https://github.com/jupyterlab/jupyterlab-git/issues/1014 - const fileBrowser = factory.defaultBrowser; + const fileBrowser = factory.createFileBrowser('id'); translator = translator ?? nullTranslator; const trans = translator.load('jupyterlab_git'); @@ -129,7 +129,7 @@ async function activate( ) ); } - } catch (error) { + } catch (error: any) { // If we fall here, nothing will be loaded in the frontend. console.error( trans.__('Failed to load the jupyterlab-git server extension settings'), @@ -220,7 +220,8 @@ async function activate( // Add a menu for the plugin if (mainMenu && app.version.split('.').slice(0, 2).join('.') < '3.1') { // Support JLab 3.0 - mainMenu.addMenu(createGitMenu(app.commands, trans), { rank: 60 }); + /*mainMenu.addMenu(createGitMenu(app.commands, trans), { rank: 60 });*/ + mainMenu.addMenu(createGitMenu(app.commands, trans)); } // Add a clone button to the file browser extension toolbar diff --git a/src/version.ts b/src/version.ts new file mode 100644 index 000000000..51c5697ab --- /dev/null +++ b/src/version.ts @@ -0,0 +1,2 @@ +// generated by genversion +export const version = '0.41.0'; diff --git a/src/widgets/GitWidget.tsx b/src/widgets/GitWidget.tsx index c8f865e4f..f109aa908 100644 --- a/src/widgets/GitWidget.tsx +++ b/src/widgets/GitWidget.tsx @@ -26,7 +26,7 @@ export class GitWidget extends ReactWidget { trans: TranslationBundle, options?: Widget.IOptions ) { - super(options); + super(); this.node.id = 'GitSession-root'; this.addClass(gitWidgetStyle); diff --git a/src/widgets/discardAllChanges.ts b/src/widgets/discardAllChanges.ts index e12a6082f..ac0419860 100644 --- a/src/widgets/discardAllChanges.ts +++ b/src/widgets/discardAllChanges.ts @@ -30,7 +30,7 @@ export async function discardAllChanges( if (result.button.accept) { try { return model.resetToCommit('HEAD'); - } catch (reason) { + } catch (reason: any) { showErrorMessage(trans.__('Discard all changes failed.'), reason); return Promise.reject(reason); } diff --git a/ui-tests/tests/jupyterlab_git.spec.ts b/ui-tests/tests/jupyterlab_git.spec.ts new file mode 100644 index 000000000..c60ae7247 --- /dev/null +++ b/ui-tests/tests/jupyterlab_git.spec.ts @@ -0,0 +1,21 @@ +import { expect, test } from '@jupyterlab/galata'; + +/** + * Don't load JupyterLab webpage before running the tests. + * This is required to ensure we capture all log messages. + */ +test.use({ autoGoto: false }); + +test('should emit an activation console message', async ({ page }) => { + const logs: string[] = []; + + page.on('console', message => { + logs.push(message.text()); + }); + + await page.goto(); + + expect( + logs.filter(s => s === 'JupyterLab extension @jupyterlab/git is activated!') + ).toHaveLength(1); +}); From b1bc873019086d3142b6256b05c7ee5cc53e57d4 Mon Sep 17 00:00:00 2001 From: Florence Haudin Date: Thu, 20 Apr 2023 09:36:41 +0200 Subject: [PATCH 02/24] Migrate mui to version 5. --- .../workflows/enforce-label.yml | 0 .../workflows/prep-release.yml | 0 .../workflows/update-integration-tests.yml | 2 +- .../.github/workflows/binder-on-pr.yml | 16 -- _temp_extension/.github/workflows/build.yml | 150 -------------- .../.github/workflows/check-release.yml | 29 --- .../.github/workflows/publish-release.yml | 56 ------ .../workflows/update-integration-tests.yml | 50 ----- _temp_extension/.gitignore | 125 ------------ _temp_extension/.prettierignore | 6 - _temp_extension/.yarnrc.yml | 3 - _temp_extension/CHANGELOG.md | 5 - _temp_extension/LICENSE | 29 --- _temp_extension/README.md | 96 --------- _temp_extension/RELEASE.md | 65 ------ _temp_extension/babel.config.js | 1 - _temp_extension/binder/environment.yml | 21 -- _temp_extension/binder/postBuild | 47 ----- _temp_extension/install.json | 5 - _temp_extension/jest.config.js | 21 -- _temp_extension/jupyterlab_git/__init__.py | 9 - _temp_extension/package.json | 185 ------------------ _temp_extension/pyproject.toml | 76 ------- _temp_extension/schema/plugin.json | 8 - _temp_extension/setup.py | 1 - _temp_extension/src/index.ts | 34 ---- _temp_extension/style/base.css | 5 - _temp_extension/style/index.css | 1 - _temp_extension/style/index.js | 1 - _temp_extension/tsconfig.json | 24 --- _temp_extension/tsconfig.test.json | 3 - _temp_extension/ui-tests/README.md | 148 -------------- .../ui-tests/jupyter_server_test_config.py | 12 -- _temp_extension/ui-tests/package.json | 15 -- _temp_extension/ui-tests/playwright.config.js | 14 -- .../ui-tests/tests/jupyterlab_git.spec.ts | 21 -- _temp_extension/ui-tests/yarn.lock | 0 .../__tests__/jupyterlab_git.spec.ts | 0 .../test-components/BranchMenu.spec.tsx | 2 +- .../test-components/CommitBox.spec.tsx | 2 +- .../test-components/CommitMessage.spec.tsx | 2 +- .../ManageRemoteDialogue.spec.tsx | 2 +- src/commandsAndMenu.tsx | 10 +- src/components/Alert.tsx | 22 +-- src/components/BranchMenu.tsx | 6 +- src/components/BranchPicker.tsx | 8 +- src/components/CommitBox.tsx | 20 +- src/components/CommitMessage.tsx | 2 +- src/components/Feedback.tsx | 3 +- src/components/GitPanel.tsx | 4 +- src/components/ManageRemoteDialogue.tsx | 6 +- src/components/NewBranchDialog.tsx | 8 +- src/components/ResetRevertDialog.tsx | 6 +- src/components/StatusWidget.tsx | 2 +- src/components/SuspendModal.tsx | 4 +- src/components/TagMenu.tsx | 6 +- src/components/Toolbar.tsx | 2 +- src/components/WarningBox.tsx | 6 +- src/components/diff/NotebookDiff.ts | 7 +- src/widgets/GitWidget.tsx | 2 +- 60 files changed, 67 insertions(+), 1349 deletions(-) rename {_temp_extension/.github => .github}/workflows/enforce-label.yml (100%) rename {_temp_extension/.github => .github}/workflows/prep-release.yml (100%) delete mode 100644 _temp_extension/.github/workflows/binder-on-pr.yml delete mode 100644 _temp_extension/.github/workflows/build.yml delete mode 100644 _temp_extension/.github/workflows/check-release.yml delete mode 100644 _temp_extension/.github/workflows/publish-release.yml delete mode 100644 _temp_extension/.github/workflows/update-integration-tests.yml delete mode 100644 _temp_extension/.gitignore delete mode 100644 _temp_extension/.prettierignore delete mode 100644 _temp_extension/.yarnrc.yml delete mode 100644 _temp_extension/CHANGELOG.md delete mode 100644 _temp_extension/LICENSE delete mode 100644 _temp_extension/README.md delete mode 100644 _temp_extension/RELEASE.md delete mode 100644 _temp_extension/babel.config.js delete mode 100644 _temp_extension/binder/environment.yml delete mode 100755 _temp_extension/binder/postBuild delete mode 100644 _temp_extension/install.json delete mode 100644 _temp_extension/jest.config.js delete mode 100644 _temp_extension/jupyterlab_git/__init__.py delete mode 100644 _temp_extension/package.json delete mode 100644 _temp_extension/pyproject.toml delete mode 100644 _temp_extension/schema/plugin.json delete mode 100644 _temp_extension/setup.py delete mode 100644 _temp_extension/src/index.ts delete mode 100644 _temp_extension/style/base.css delete mode 100644 _temp_extension/style/index.css delete mode 100644 _temp_extension/style/index.js delete mode 100644 _temp_extension/tsconfig.json delete mode 100644 _temp_extension/tsconfig.test.json delete mode 100644 _temp_extension/ui-tests/README.md delete mode 100644 _temp_extension/ui-tests/jupyter_server_test_config.py delete mode 100644 _temp_extension/ui-tests/package.json delete mode 100644 _temp_extension/ui-tests/playwright.config.js delete mode 100644 _temp_extension/ui-tests/tests/jupyterlab_git.spec.ts delete mode 100644 _temp_extension/ui-tests/yarn.lock rename {_temp_extension/src => src}/__tests__/jupyterlab_git.spec.ts (100%) diff --git a/_temp_extension/.github/workflows/enforce-label.yml b/.github/workflows/enforce-label.yml similarity index 100% rename from _temp_extension/.github/workflows/enforce-label.yml rename to .github/workflows/enforce-label.yml diff --git a/_temp_extension/.github/workflows/prep-release.yml b/.github/workflows/prep-release.yml similarity index 100% rename from _temp_extension/.github/workflows/prep-release.yml rename to .github/workflows/prep-release.yml diff --git a/.github/workflows/update-integration-tests.yml b/.github/workflows/update-integration-tests.yml index 1b0349e79..19517c532 100644 --- a/.github/workflows/update-integration-tests.yml +++ b/.github/workflows/update-integration-tests.yml @@ -35,7 +35,7 @@ jobs: python_version: '3.10' - name: Install dependencies - run: python -m pip install -U jupyterlab~=3.1 jupyter-archive + run: python -m pip install -U "jupyterlab>=4.0.0b0,<5" jupyter-archive - name: Install extension run: | diff --git a/_temp_extension/.github/workflows/binder-on-pr.yml b/_temp_extension/.github/workflows/binder-on-pr.yml deleted file mode 100644 index 47e458ef6..000000000 --- a/_temp_extension/.github/workflows/binder-on-pr.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Binder Badge -on: - pull_request_target: - types: [opened] - -jobs: - binder: - runs-on: ubuntu-latest - permissions: - pull-requests: write - steps: - - uses: jupyterlab/maintainer-tools/.github/actions/binder-link@v1 - with: - - github_token: ${{ secrets.github_token }} - diff --git a/_temp_extension/.github/workflows/build.yml b/_temp_extension/.github/workflows/build.yml deleted file mode 100644 index df86f7cbf..000000000 --- a/_temp_extension/.github/workflows/build.yml +++ /dev/null @@ -1,150 +0,0 @@ -name: Build - -on: - push: - branches: main - pull_request: - branches: '*' - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Base Setup - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - - - name: Install dependencies - run: python -m pip install -U "jupyterlab>=4.0.0b0,<5" - - - name: Lint the extension - run: | - set -eux - jlpm - jlpm run lint:check - - - name: Test the extension - run: | - set -eux - jlpm run test - - - name: Build the extension - run: | - set -eux - python -m pip install .[test] - - jupyter labextension list - jupyter labextension list 2>&1 | grep -ie "@jupyterlab/git.*OK" - python -m jupyterlab.browser_check - - - name: Package the extension - run: | - set -eux - - pip install build - python -m build - pip uninstall -y "jupyterlab_git" jupyterlab - - - name: Upload extension packages - uses: actions/upload-artifact@v3 - with: - name: extension-artifacts - path: dist/jupyterlab_git* - if-no-files-found: error - - test_isolated: - needs: build - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Install Python - uses: actions/setup-python@v4 - with: - python-version: '3.9' - architecture: 'x64' - - uses: actions/download-artifact@v3 - with: - name: extension-artifacts - - name: Install and Test - run: | - set -eux - # Remove NodeJS, twice to take care of system and locally installed node versions. - sudo rm -rf $(which node) - sudo rm -rf $(which node) - - pip install "jupyterlab>=4.0.0b0,<5" jupyterlab_git*.whl - - - jupyter labextension list - jupyter labextension list 2>&1 | grep -ie "@jupyterlab/git.*OK" - python -m jupyterlab.browser_check --no-browser-test - - integration-tests: - name: Integration tests - needs: build - runs-on: ubuntu-latest - - env: - PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/pw-browsers - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Base Setup - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - - - name: Download extension package - uses: actions/download-artifact@v3 - with: - name: extension-artifacts - - - name: Install the extension - run: | - set -eux - python -m pip install "jupyterlab>=4.0.0b0,<5" jupyterlab_git*.whl - - - name: Install dependencies - working-directory: ui-tests - env: - PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 - run: jlpm install - - - name: Set up browser cache - uses: actions/cache@v3 - with: - path: | - ${{ github.workspace }}/pw-browsers - key: ${{ runner.os }}-${{ hashFiles('ui-tests/yarn.lock') }} - - - name: Install browser - run: jlpm playwright install chromium - working-directory: ui-tests - - - name: Execute integration tests - working-directory: ui-tests - run: | - jlpm playwright test - - - name: Upload Playwright Test report - if: always() - uses: actions/upload-artifact@v3 - with: - name: jupyterlab_git-playwright-tests - path: | - ui-tests/test-results - ui-tests/playwright-report - - check_links: - name: Check Links - runs-on: ubuntu-latest - timeout-minutes: 15 - steps: - - uses: actions/checkout@v3 - - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - - uses: jupyterlab/maintainer-tools/.github/actions/check-links@v1 diff --git a/_temp_extension/.github/workflows/check-release.yml b/_temp_extension/.github/workflows/check-release.yml deleted file mode 100644 index 17353384a..000000000 --- a/_temp_extension/.github/workflows/check-release.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Check Release -on: - push: - branches: ["main"] - pull_request: - branches: ["*"] - -jobs: - check_release: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Base Setup - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - - name: Install Dependencies - run: | - pip install -e . - - name: Check Release - uses: jupyter-server/jupyter_releaser/.github/actions/check-release@v2 - with: - - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Upload Distributions - uses: actions/upload-artifact@v3 - with: - name: jupyterlab_git-releaser-dist-${{ github.run_number }} - path: .jupyter_releaser_checkout/dist diff --git a/_temp_extension/.github/workflows/publish-release.yml b/_temp_extension/.github/workflows/publish-release.yml deleted file mode 100644 index 2150ad451..000000000 --- a/_temp_extension/.github/workflows/publish-release.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: "Step 2: Publish Release" -on: - workflow_dispatch: - inputs: - branch: - description: "The target branch" - required: false - release_url: - description: "The URL of the draft GitHub release" - required: false - steps_to_skip: - description: "Comma separated list of steps to skip" - required: false - -jobs: - publish_release: - runs-on: ubuntu-latest - steps: - - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - - - - name: Populate Release - id: populate-release - uses: jupyter-server/jupyter_releaser/.github/actions/populate-release@v2 - with: - token: ${{ secrets.ADMIN_GITHUB_TOKEN }} - target: ${{ github.event.inputs.target }} - branch: ${{ github.event.inputs.branch }} - release_url: ${{ github.event.inputs.release_url }} - steps_to_skip: ${{ github.event.inputs.steps_to_skip }} - - - name: Finalize Release - id: finalize-release - env: - PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} - PYPI_TOKEN_MAP: ${{ secrets.PYPI_TOKEN_MAP }} - TWINE_USERNAME: __token__ - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - uses: jupyter-server/jupyter-releaser/.github/actions/finalize-release@v2 - with: - token: ${{ secrets.ADMIN_GITHUB_TOKEN }} - target: ${{ github.event.inputs.target }} - release_url: ${{ steps.populate-release.outputs.release_url }} - - - name: "** Next Step **" - if: ${{ success() }} - run: | - echo "Verify the final release" - echo ${{ steps.finalize-release.outputs.release_url }} - - - name: "** Failure Message **" - if: ${{ failure() }} - run: | - echo "Failed to Publish the Draft Release Url:" - echo ${{ steps.populate-release.outputs.release_url }} - diff --git a/_temp_extension/.github/workflows/update-integration-tests.yml b/_temp_extension/.github/workflows/update-integration-tests.yml deleted file mode 100644 index 714fd6ff0..000000000 --- a/_temp_extension/.github/workflows/update-integration-tests.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Update Playwright Snapshots - -on: - issue_comment: - types: [created, edited] - -permissions: - contents: write - pull-requests: write - -jobs: - - - update-snapshots: - if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, 'please update playwright snapshots') }} - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Configure git to use https - run: git config --global hub.protocol https - - - name: Checkout the branch from the PR that triggered the job - run: hub pr checkout ${{ github.event.issue.number }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Base Setup - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - - - name: Install dependencies - run: python -m pip install -U "jupyterlab>=4.0.0b0,<5" - - - name: Install extension - run: | - set -eux - jlpm - python -m pip install . - - - uses: jupyterlab/maintainer-tools/.github/actions/update-snapshots@v1 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - # Playwright knows how to start JupyterLab server - start_server_script: 'null' - test_folder: ui-tests - diff --git a/_temp_extension/.gitignore b/_temp_extension/.gitignore deleted file mode 100644 index ae58ed316..000000000 --- a/_temp_extension/.gitignore +++ /dev/null @@ -1,125 +0,0 @@ -*.bundle.* -lib/ -node_modules/ -*.log -.eslintcache -.stylelintcache -*.egg-info/ -.ipynb_checkpoints -*.tsbuildinfo -jupyterlab_git/labextension -# Version file is handled by hatchling -jupyterlab_git/_version.py - -# Integration tests -ui-tests/test-results/ -ui-tests/playwright-report/ - -# Created by https://www.gitignore.io/api/python -# Edit at https://www.gitignore.io/?templates=python - -### Python ### -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage/ -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# Mr Developer -.mr.developer.cfg -.project -.pydevproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# End of https://www.gitignore.io/api/python - -# OSX files -.DS_Store - -# Yarn cache -.yarn/ diff --git a/_temp_extension/.prettierignore b/_temp_extension/.prettierignore deleted file mode 100644 index c7b065072..000000000 --- a/_temp_extension/.prettierignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules -**/node_modules -**/lib -**/package.json -!/package.json -jupyterlab_git diff --git a/_temp_extension/.yarnrc.yml b/_temp_extension/.yarnrc.yml deleted file mode 100644 index fe1125f54..000000000 --- a/_temp_extension/.yarnrc.yml +++ /dev/null @@ -1,3 +0,0 @@ -enableImmutableInstalls: false - -nodeLinker: node-modules diff --git a/_temp_extension/CHANGELOG.md b/_temp_extension/CHANGELOG.md deleted file mode 100644 index 2d352af42..000000000 --- a/_temp_extension/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -# Changelog - - - - diff --git a/_temp_extension/LICENSE b/_temp_extension/LICENSE deleted file mode 100644 index 3d314769e..000000000 --- a/_temp_extension/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2023, Jupyter Development Team -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/_temp_extension/README.md b/_temp_extension/README.md deleted file mode 100644 index cc96bfb6a..000000000 --- a/_temp_extension/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# jupyterlab_git - -[![Github Actions Status](https://github.com/jupyterlab/jupyterlab-git/workflows/Build/badge.svg)](https://github.com/jupyterlab/jupyterlab-git/actions/workflows/build.yml)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jupyterlab/jupyterlab-git/main?urlpath=lab) -A JupyterLab extension for version control using git - -## Requirements - -- JupyterLab >= 4.0.0b0 - -## Install - -To install the extension, execute: - -```bash -pip install jupyterlab_git -``` - -## Uninstall - -To remove the extension, execute: - -```bash -pip uninstall jupyterlab_git -``` - -## Contributing - -### Development install - -Note: You will need NodeJS to build the extension package. - -The `jlpm` command is JupyterLab's pinned version of -[yarn](https://yarnpkg.com/) that is installed with JupyterLab. You may use -`yarn` or `npm` in lieu of `jlpm` below. - -```bash -# Clone the repo to your local environment -# Change directory to the jupyterlab_git directory -# Install package in development mode -pip install -e "." -# Link your development version of the extension with JupyterLab -jupyter labextension develop . --overwrite -# Rebuild extension Typescript source after making changes -jlpm build -``` - -You can watch the source directory and run JupyterLab at the same time in different terminals to watch for changes in the extension's source and automatically rebuild the extension. - -```bash -# Watch the source directory in one terminal, automatically rebuilding when needed -jlpm watch -# Run JupyterLab in another terminal -jupyter lab -``` - -With the watch command running, every saved change will immediately be built locally and available in your running JupyterLab. Refresh JupyterLab to load the change in your browser (you may need to wait several seconds for the extension to be rebuilt). - -By default, the `jlpm build` command generates the source maps for this extension to make it easier to debug using the browser dev tools. To also generate source maps for the JupyterLab core extensions, you can run the following command: - -```bash -jupyter lab build --minimize=False -``` - -### Development uninstall - -```bash -pip uninstall jupyterlab_git -``` - -In development mode, you will also need to remove the symlink created by `jupyter labextension develop` -command. To find its location, you can run `jupyter labextension list` to figure out where the `labextensions` -folder is located. Then you can remove the symlink named `@jupyterlab/git` within that folder. - -### Testing the extension - -#### Frontend tests - -This extension is using [Jest](https://jestjs.io/) for JavaScript code testing. - -To execute them, execute: - -```sh -jlpm -jlpm test -``` - -#### Integration tests - -This extension uses [Playwright](https://playwright.dev/docs/intro/) for the integration tests (aka user level tests). -More precisely, the JupyterLab helper [Galata](https://github.com/jupyterlab/jupyterlab/tree/master/galata) is used to handle testing the extension in JupyterLab. - -More information are provided within the [ui-tests](./ui-tests/README.md) README. - -### Packaging the extension - -See [RELEASE](RELEASE.md) diff --git a/_temp_extension/RELEASE.md b/_temp_extension/RELEASE.md deleted file mode 100644 index f0a990f76..000000000 --- a/_temp_extension/RELEASE.md +++ /dev/null @@ -1,65 +0,0 @@ -# Making a new release of jupyterlab_git - -The extension can be published to `PyPI` and `npm` manually or using the [Jupyter Releaser](https://github.com/jupyter-server/jupyter_releaser). - -## Manual release - -### Python package - -This extension can be distributed as Python packages. All of the Python -packaging instructions are in the `pyproject.toml` file to wrap your extension in a -Python package. Before generating a package, you first need to install some tools: - -```bash -pip install build twine hatch -``` - -Bump the version using `hatch`. By default this will create a tag. -See the docs on [hatch-nodejs-version](https://github.com/agoose77/hatch-nodejs-version#semver) for details. - -```bash -hatch version -``` - -To create a Python source package (`.tar.gz`) and the binary package (`.whl`) in the `dist/` directory, do: - -```bash -python -m build -``` - -> `python setup.py sdist bdist_wheel` is deprecated and will not work for this package. - -Then to upload the package to PyPI, do: - -```bash -twine upload dist/* -``` - -### NPM package - -To publish the frontend part of the extension as a NPM package, do: - -```bash -npm login -npm publish --access public -``` - -## Automated releases with the Jupyter Releaser - -The extension repository should already be compatible with the Jupyter Releaser. - -Check out the [workflow documentation](https://jupyter-releaser.readthedocs.io/en/latest/get_started/making_release_from_repo.html) for more information. - -Here is a summary of the steps to cut a new release: - -- Add `ADMIN_GITHUB_TOKEN`, `PYPI_TOKEN` and `NPM_TOKEN` to the [Github Secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) in the repository -- Go to the Actions panel -- Run the "Step 1: Prep Release" workflow -- Check the draft changelog -- Run the "Step 2: Publish Release" workflow - -## Publishing to `conda-forge` - -If the package is not on conda forge yet, check the documentation to learn how to add it: https://conda-forge.org/docs/maintainer/adding_pkgs.html - -Otherwise a bot should pick up the new version publish to PyPI, and open a new PR on the feedstock repository automatically. diff --git a/_temp_extension/babel.config.js b/_temp_extension/babel.config.js deleted file mode 100644 index 8b5c76420..000000000 --- a/_temp_extension/babel.config.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('@jupyterlab/testutils/lib/babel.config'); diff --git a/_temp_extension/binder/environment.yml b/_temp_extension/binder/environment.yml deleted file mode 100644 index 574887423..000000000 --- a/_temp_extension/binder/environment.yml +++ /dev/null @@ -1,21 +0,0 @@ -# a mybinder.org-ready environment for demoing jupyterlab_git -# this environment may also be used locally on Linux/MacOS/Windows, e.g. -# -# conda env update --file binder/environment.yml -# conda activate jupyterlab-git-demo -# -name: jupyterlab-git-demo - -channels: - - conda-forge - -dependencies: - # runtime dependencies - - python >=3.10,<3.11.0a0 - - jupyterlab >=4.0.0b0,<5 - # labextension build dependencies - - nodejs >=18,<19 - - pip - - wheel - # additional packages for demos - # - ipywidgets diff --git a/_temp_extension/binder/postBuild b/_temp_extension/binder/postBuild deleted file mode 100755 index 53e086339..000000000 --- a/_temp_extension/binder/postBuild +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python3 -""" perform a development install of jupyterlab_git - - On Binder, this will run _after_ the environment has been fully created from - the environment.yml in this directory. - - This script should also run locally on Linux/MacOS/Windows: - - python3 binder/postBuild -""" -import subprocess -import sys -from pathlib import Path - - -ROOT = Path.cwd() - -def _(*args, **kwargs): - """ Run a command, echoing the args - - fails hard if something goes wrong - """ - print("\n\t", " ".join(args), "\n") - return_code = subprocess.call(args, **kwargs) - if return_code != 0: - print("\nERROR", return_code, " ".join(args)) - sys.exit(return_code) - -# verify the environment is self-consistent before even starting -_(sys.executable, "-m", "pip", "check") - -# install the labextension -_(sys.executable, "-m", "pip", "install", "-e", ".") -_(sys.executable, "-m", "jupyter", "labextension", "develop", "--overwrite", ".") - -# verify the environment the extension didn't break anything -_(sys.executable, "-m", "pip", "check") - -# list the extensions -_("jupyter", "server", "extension", "list") - -# initially list installed extensions to determine if there are any surprises -_("jupyter", "labextension", "list") - - -print("JupyterLab with jupyterlab_git is ready to run with:\n") -print("\tjupyter lab\n") diff --git a/_temp_extension/install.json b/_temp_extension/install.json deleted file mode 100644 index 55ce3e46d..000000000 --- a/_temp_extension/install.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "packageManager": "python", - "packageName": "jupyterlab_git", - "uninstallInstructions": "Use your Python package manager (pip, conda, etc.) to uninstall the package jupyterlab_git" -} diff --git a/_temp_extension/jest.config.js b/_temp_extension/jest.config.js deleted file mode 100644 index 38993844e..000000000 --- a/_temp_extension/jest.config.js +++ /dev/null @@ -1,21 +0,0 @@ -const jestJupyterLab = require('@jupyterlab/testutils/lib/jest-config'); - -const esModules = ['@jupyterlab/'].join('|'); - -const baseConfig = jestJupyterLab(__dirname); - -module.exports = { - ...baseConfig, - automock: false, - collectCoverageFrom: [ - 'src/**/*.{ts,tsx}', - '!src/**/*.d.ts', - '!src/**/.ipynb_checkpoints/*' - ], - coverageReporters: ['lcov', 'text'], - testRegex: 'src/.*/.*.spec.ts[x]?$', - transformIgnorePatterns: [ - ...baseConfig.transformIgnorePatterns, - `/node_modules/(?!${esModules}).+` - ] -}; diff --git a/_temp_extension/jupyterlab_git/__init__.py b/_temp_extension/jupyterlab_git/__init__.py deleted file mode 100644 index 04e3ff723..000000000 --- a/_temp_extension/jupyterlab_git/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from ._version import __version__ - - -def _jupyter_labextension_paths(): - return [{ - "src": "labextension", - "dest": "@jupyterlab/git" - }] - diff --git a/_temp_extension/package.json b/_temp_extension/package.json deleted file mode 100644 index 73e260195..000000000 --- a/_temp_extension/package.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "name": "@jupyterlab/git", - "version": "0.1.0", - "description": "A JupyterLab extension for version control using git", - "keywords": [ - "jupyter", - "jupyterlab", - "jupyterlab-extension" - ], - "homepage": "https://github.com/jupyterlab/jupyterlab-git", - "bugs": { - "url": "https://github.com/jupyterlab/jupyterlab-git/issues" - }, - "license": "BSD-3-Clause", - "author": { - "name": "Jupyter Development Team", - "email": "" - }, - "files": [ - "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", - "schema/*.json" - ], - "main": "lib/index.js", - "types": "lib/index.d.ts", - "style": "style/index.css", - "repository": { - "type": "git", - "url": "https://github.com/jupyterlab/jupyterlab-git.git" - }, - "workspaces": [ - "ui-tests" - ], - "scripts": { - "build": "jlpm build:lib && jlpm build:labextension:dev", - "build:prod": "jlpm clean && jlpm build:lib:prod && jlpm build:labextension", - "build:labextension": "jupyter labextension build .", - "build:labextension:dev": "jupyter labextension build --development True .", - "build:lib": "tsc --sourceMap", - "build:lib:prod": "tsc", - "clean": "jlpm clean:lib", - "clean:lib": "rimraf lib tsconfig.tsbuildinfo", - "clean:lintcache": "rimraf .eslintcache .stylelintcache", - "clean:labextension": "rimraf jupyterlab_git/labextension jupyterlab_git/_version.py", - "clean:all": "jlpm clean:lib && jlpm clean:labextension && jlpm clean:lintcache", - "eslint": "jlpm eslint:check --fix", - "eslint:check": "eslint . --cache --ext .ts,.tsx", - "install:extension": "jlpm build", - "lint": "jlpm stylelint && jlpm prettier && jlpm eslint", - "lint:check": "jlpm stylelint:check && jlpm prettier:check && jlpm eslint:check", - "prettier": "jlpm prettier:base --write --list-different", - "prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.md}\"", - "prettier:check": "jlpm prettier:base --check", - "stylelint": "jlpm stylelint:check --fix", - "stylelint:check": "stylelint --cache \"style/**/*.css\"", - "test": "jest --coverage", - "watch": "run-p watch:src watch:labextension", - "watch:src": "tsc -w", - "watch:labextension": "jupyter labextension watch ." - }, - "dependencies": { - "@jupyterlab/application": "^4.0.0-beta.0", - "@jupyterlab/settingregistry": "^4.0.0-beta.0" - }, - "devDependencies": { - "@jupyterlab/builder": "^4.0.0-beta.0", - "@jupyterlab/testutils": "^4.0.0-beta.0", - "@types/jest": "^29.2.0", - "@types/json-schema": "^7.0.11", - "@types/react": "^18.0.26", - "@typescript-eslint/eslint-plugin": "^5.55.0", - "@typescript-eslint/parser": "^5.55.0", - "css-loader": "^6.7.1", - "eslint": "^8.36.0", - "eslint-config-prettier": "^8.7.0", - "eslint-plugin-prettier": "^4.2.1", - "jest": "^29.2.0", - "npm-run-all": "^4.1.5", - "prettier": "^2.8.7", - "rimraf": "^4.4.1", - "source-map-loader": "^1.0.2", - "style-loader": "^3.3.1", - "stylelint": "^14.9.1", - "stylelint-config-prettier": "^9.0.4", - "stylelint-config-recommended": "^8.0.0", - "stylelint-config-standard": "^26.0.0", - "stylelint-prettier": "^2.0.0", - "typescript": "~5.0.2", - "yjs": "^13.5.0" - }, - "sideEffects": [ - "style/*.css", - "style/index.js" - ], - "styleModule": "style/index.js", - "publishConfig": { - "access": "public" - }, - "jupyterlab": { - "extension": true, - "outputDir": "jupyterlab_git/labextension", - "schemaDir": "schema" - }, - "eslintIgnore": [ - "node_modules", - "dist", - "coverage", - "**/*.d.ts", - "tests", - "**/__tests__", - "ui-tests" - ], - "eslintConfig": { - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "tsconfig.json", - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": "interface", - "format": [ - "PascalCase" - ], - "custom": { - "regex": "^I[A-Z]", - "match": true - } - } - ], - "@typescript-eslint/no-unused-vars": [ - "warn", - { - "args": "none" - } - ], - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/quotes": [ - "error", - "single", - { - "avoidEscape": true, - "allowTemplateLiterals": false - } - ], - "curly": [ - "error", - "all" - ], - "eqeqeq": "error", - "prefer-arrow-callback": "error" - } - }, - "prettier": { - "singleQuote": true, - "trailingComma": "none", - "arrowParens": "avoid", - "endOfLine": "auto" - }, - "stylelint": { - "extends": [ - "stylelint-config-recommended", - "stylelint-config-standard", - "stylelint-prettier/recommended" - ], - "rules": { - "property-no-vendor-prefix": null, - "selector-no-vendor-prefix": null, - "value-no-vendor-prefix": null - } - } -} diff --git a/_temp_extension/pyproject.toml b/_temp_extension/pyproject.toml deleted file mode 100644 index c55078ac7..000000000 --- a/_temp_extension/pyproject.toml +++ /dev/null @@ -1,76 +0,0 @@ -[build-system] -requires = ["hatchling>=1.5.0", "jupyterlab>=4.0.0b0,<5", "hatch-nodejs-version"] -build-backend = "hatchling.build" - -[project] -name = "jupyterlab_git" -readme = "README.md" -license = { file = "LICENSE" } -requires-python = ">=3.8" -classifiers = [ - "Framework :: Jupyter", - "Framework :: Jupyter :: JupyterLab", - "Framework :: Jupyter :: JupyterLab :: 4", - "Framework :: Jupyter :: JupyterLab :: Extensions", - "Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt", - "License :: OSI Approved :: BSD License", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", -] -dependencies = [ -] -dynamic = ["version", "description", "authors", "urls", "keywords"] - -[tool.hatch.version] -source = "nodejs" - -[tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] - -[tool.hatch.build.targets.sdist] -artifacts = ["jupyterlab_git/labextension"] -exclude = [".github", "binder"] - -[tool.hatch.build.targets.wheel.shared-data] -"jupyterlab_git/labextension" = "share/jupyter/labextensions/@jupyterlab/git" -"install.json" = "share/jupyter/labextensions/@jupyterlab/git/install.json" - -[tool.hatch.build.hooks.version] -path = "jupyterlab_git/_version.py" - -[tool.hatch.build.hooks.jupyter-builder] -dependencies = ["hatch-jupyter-builder>=0.5"] -build-function = "hatch_jupyter_builder.npm_builder" -ensured-targets = [ - "jupyterlab_git/labextension/static/style.js", - "jupyterlab_git/labextension/package.json", -] -skip-if-exists = ["jupyterlab_git/labextension/static/style.js"] - -[tool.hatch.build.hooks.jupyter-builder.build-kwargs] -build_cmd = "build:prod" -npm = ["jlpm"] - -[tool.hatch.build.hooks.jupyter-builder.editable-build-kwargs] -build_cmd = "install:extension" -npm = ["jlpm"] -source_dir = "src" -build_dir = "jupyterlab_git/labextension" - -[tool.jupyter-releaser.options] -version_cmd = "hatch version" - -[tool.jupyter-releaser.hooks] -before-build-npm = [ - "python -m pip install 'jupyterlab>=4.0.0b0,<5'", - "jlpm", - "jlpm build:prod" -] -before-build-python = ["jlpm clean:all"] - -[tool.check-wheel-contents] -ignore = ["W002"] diff --git a/_temp_extension/schema/plugin.json b/_temp_extension/schema/plugin.json deleted file mode 100644 index a6a5dba21..000000000 --- a/_temp_extension/schema/plugin.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "jupyter.lab.shortcuts": [], - "title": "@jupyterlab/git", - "description": "@jupyterlab/git settings.", - "type": "object", - "properties": {}, - "additionalProperties": false -} diff --git a/_temp_extension/setup.py b/_temp_extension/setup.py deleted file mode 100644 index bea233743..000000000 --- a/_temp_extension/setup.py +++ /dev/null @@ -1 +0,0 @@ -__import__('setuptools').setup() diff --git a/_temp_extension/src/index.ts b/_temp_extension/src/index.ts deleted file mode 100644 index 66097408f..000000000 --- a/_temp_extension/src/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { - JupyterFrontEnd, - JupyterFrontEndPlugin -} from '@jupyterlab/application'; - -import { ISettingRegistry } from '@jupyterlab/settingregistry'; - -/** - * Initialization data for the @jupyterlab/git extension. - */ -const plugin: JupyterFrontEndPlugin = { - id: '@jupyterlab/git:plugin', - autoStart: true, - optional: [ISettingRegistry], - activate: ( - app: JupyterFrontEnd, - settingRegistry: ISettingRegistry | null - ) => { - console.log('JupyterLab extension @jupyterlab/git is activated!'); - - if (settingRegistry) { - settingRegistry - .load(plugin.id) - .then(settings => { - console.log('@jupyterlab/git settings loaded:', settings.composite); - }) - .catch(reason => { - console.error('Failed to load settings for @jupyterlab/git.', reason); - }); - } - } -}; - -export default plugin; diff --git a/_temp_extension/style/base.css b/_temp_extension/style/base.css deleted file mode 100644 index e11f45777..000000000 --- a/_temp_extension/style/base.css +++ /dev/null @@ -1,5 +0,0 @@ -/* - See the JupyterLab Developer Guide for useful CSS Patterns: - - https://jupyterlab.readthedocs.io/en/stable/developer/css.html -*/ diff --git a/_temp_extension/style/index.css b/_temp_extension/style/index.css deleted file mode 100644 index e98119b5b..000000000 --- a/_temp_extension/style/index.css +++ /dev/null @@ -1 +0,0 @@ -@import 'base.css'; diff --git a/_temp_extension/style/index.js b/_temp_extension/style/index.js deleted file mode 100644 index a028a7640..000000000 --- a/_temp_extension/style/index.js +++ /dev/null @@ -1 +0,0 @@ -import './base.css'; diff --git a/_temp_extension/tsconfig.json b/_temp_extension/tsconfig.json deleted file mode 100644 index 4f3547dad..000000000 --- a/_temp_extension/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "composite": true, - "declaration": true, - "esModuleInterop": true, - "incremental": true, - "jsx": "react", - "module": "esnext", - "moduleResolution": "node", - "noEmitOnError": true, - "noImplicitAny": true, - "noUnusedLocals": true, - "preserveWatchOutput": true, - "resolveJsonModule": true, - "outDir": "lib", - "rootDir": "src", - "strict": true, - "strictNullChecks": true, - "target": "ES2018", - "types": ["jest"] - }, - "include": ["src/*"] -} diff --git a/_temp_extension/tsconfig.test.json b/_temp_extension/tsconfig.test.json deleted file mode 100644 index 1c66acf6d..000000000 --- a/_temp_extension/tsconfig.test.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "./tsconfig" -} diff --git a/_temp_extension/ui-tests/README.md b/_temp_extension/ui-tests/README.md deleted file mode 100644 index 3544aec4e..000000000 --- a/_temp_extension/ui-tests/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# Integration Testing - -This folder contains the integration tests of the extension. - -They are defined using [Playwright](https://playwright.dev/docs/intro) test runner -and [Galata](https://github.com/jupyterlab/jupyterlab/tree/master/galata) helper. - -The Playwright configuration is defined in [playwright.config.js](./playwright.config.js). - -The JupyterLab server configuration to use for the integration test is defined -in [jupyter_server_test_config.py](./jupyter_server_test_config.py). - -The default configuration will produce video for failing tests and an HTML report. - -## Run the tests - -> All commands are assumed to be executed from the root directory - -To run the tests, you need to: - -1. Compile the extension: - -```sh -jlpm install -jlpm build:prod -``` - -> Check the extension is installed in JupyterLab. - -2. Install test dependencies (needed only once): - -```sh -cd ./ui-tests -jlpm install -jlpm playwright install -cd .. -``` - -3. Execute the [Playwright](https://playwright.dev/docs/intro) tests: - -```sh -cd ./ui-tests -jlpm playwright test -``` - -Test results will be shown in the terminal. In case of any test failures, the test report -will be opened in your browser at the end of the tests execution; see -[Playwright documentation](https://playwright.dev/docs/test-reporters#html-reporter) -for configuring that behavior. - -## Update the tests snapshots - -> All commands are assumed to be executed from the root directory - -If you are comparing snapshots to validate your tests, you may need to update -the reference snapshots stored in the repository. To do that, you need to: - -1. Compile the extension: - -```sh -jlpm install -jlpm build:prod -``` - -> Check the extension is installed in JupyterLab. - -2. Install test dependencies (needed only once): - -```sh -cd ./ui-tests -jlpm install -jlpm playwright install -cd .. -``` - -3. Execute the [Playwright](https://playwright.dev/docs/intro) command: - -```sh -cd ./ui-tests -jlpm playwright test -u -``` - -> Some discrepancy may occurs between the snapshots generated on your computer and -> the one generated on the CI. To ease updating the snapshots on a PR, you can -> type `please update playwright snapshots` to trigger the update by a bot on the CI. -> Once the bot has computed new snapshots, it will commit them to the PR branch. - -## Create tests - -> All commands are assumed to be executed from the root directory - -To create tests, the easiest way is to use the code generator tool of playwright: - -1. Compile the extension: - -```sh -jlpm install -jlpm build:prod -``` - -> Check the extension is installed in JupyterLab. - -2. Install test dependencies (needed only once): - -```sh -cd ./ui-tests -jlpm install -jlpm playwright install -cd .. -``` - -3. Execute the [Playwright code generator](https://playwright.dev/docs/codegen): - -```sh -cd ./ui-tests -jlpm playwright codegen localhost:8888 -``` - -## Debug tests - -> All commands are assumed to be executed from the root directory - -To debug tests, a good way is to use the inspector tool of playwright: - -1. Compile the extension: - -```sh -jlpm install -jlpm build:prod -``` - -> Check the extension is installed in JupyterLab. - -2. Install test dependencies (needed only once): - -```sh -cd ./ui-tests -jlpm install -jlpm playwright install -cd .. -``` - -3. Execute the Playwright tests in [debug mode](https://playwright.dev/docs/debug): - -```sh -cd ./ui-tests -PWDEBUG=1 jlpm playwright test -``` diff --git a/_temp_extension/ui-tests/jupyter_server_test_config.py b/_temp_extension/ui-tests/jupyter_server_test_config.py deleted file mode 100644 index f2a94782a..000000000 --- a/_temp_extension/ui-tests/jupyter_server_test_config.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Server configuration for integration tests. - -!! Never use this configuration in production because it -opens the server to the world and provide access to JupyterLab -JavaScript objects through the global window variable. -""" -from jupyterlab.galata import configure_jupyter_server - -configure_jupyter_server(c) - -# Uncomment to set server log level to debug level -# c.ServerApp.log_level = "DEBUG" diff --git a/_temp_extension/ui-tests/package.json b/_temp_extension/ui-tests/package.json deleted file mode 100644 index 42cb34ba5..000000000 --- a/_temp_extension/ui-tests/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@jupyterlab/git-ui-tests", - "version": "1.0.0", - "description": "JupyterLab @jupyterlab/git Integration Tests", - "private": true, - "scripts": { - "start": "jupyter lab --config jupyter_server_test_config.py", - "test": "jlpm playwright test", - "test:update": "jlpm playwright test --update-snapshots" - }, - "devDependencies": { - "@jupyterlab/galata": "^5.0.0-beta.0", - "@playwright/test": "^1.31.0" - } -} diff --git a/_temp_extension/ui-tests/playwright.config.js b/_temp_extension/ui-tests/playwright.config.js deleted file mode 100644 index 9ece6fa11..000000000 --- a/_temp_extension/ui-tests/playwright.config.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Configuration for Playwright using default from @jupyterlab/galata - */ -const baseConfig = require('@jupyterlab/galata/lib/playwright-config'); - -module.exports = { - ...baseConfig, - webServer: { - command: 'jlpm start', - url: 'http://localhost:8888/lab', - timeout: 120 * 1000, - reuseExistingServer: !process.env.CI - } -}; diff --git a/_temp_extension/ui-tests/tests/jupyterlab_git.spec.ts b/_temp_extension/ui-tests/tests/jupyterlab_git.spec.ts deleted file mode 100644 index c60ae7247..000000000 --- a/_temp_extension/ui-tests/tests/jupyterlab_git.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { expect, test } from '@jupyterlab/galata'; - -/** - * Don't load JupyterLab webpage before running the tests. - * This is required to ensure we capture all log messages. - */ -test.use({ autoGoto: false }); - -test('should emit an activation console message', async ({ page }) => { - const logs: string[] = []; - - page.on('console', message => { - logs.push(message.text()); - }); - - await page.goto(); - - expect( - logs.filter(s => s === 'JupyterLab extension @jupyterlab/git is activated!') - ).toHaveLength(1); -}); diff --git a/_temp_extension/ui-tests/yarn.lock b/_temp_extension/ui-tests/yarn.lock deleted file mode 100644 index e69de29bb..000000000 diff --git a/_temp_extension/src/__tests__/jupyterlab_git.spec.ts b/src/__tests__/jupyterlab_git.spec.ts similarity index 100% rename from _temp_extension/src/__tests__/jupyterlab_git.spec.ts rename to src/__tests__/jupyterlab_git.spec.ts diff --git a/src/__tests__/test-components/BranchMenu.spec.tsx b/src/__tests__/test-components/BranchMenu.spec.tsx index 14abe6888..c6bdbbb18 100644 --- a/src/__tests__/test-components/BranchMenu.spec.tsx +++ b/src/__tests__/test-components/BranchMenu.spec.tsx @@ -13,7 +13,7 @@ import { defaultMockedResponses, DEFAULT_REPOSITORY_PATH } from '../utils'; -import ClearIcon from '@material-ui/icons/Clear'; +import ClearIcon from '@mui/icons-material/Clear'; import { nullTranslator } from '@jupyterlab/translation'; jest.mock('../../git'); diff --git a/src/__tests__/test-components/CommitBox.spec.tsx b/src/__tests__/test-components/CommitBox.spec.tsx index 116004947..26baf7463 100644 --- a/src/__tests__/test-components/CommitBox.spec.tsx +++ b/src/__tests__/test-components/CommitBox.spec.tsx @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-empty-function */ import { nullTranslator } from '@jupyterlab/translation'; import { CommandRegistry } from '@lumino/commands'; -import Button from '@material-ui/core/Button'; +import Button from '@mui/material/Button'; import { shallow } from 'enzyme'; import 'jest'; import * as React from 'react'; diff --git a/src/__tests__/test-components/CommitMessage.spec.tsx b/src/__tests__/test-components/CommitMessage.spec.tsx index e8c99460b..d884cac19 100644 --- a/src/__tests__/test-components/CommitMessage.spec.tsx +++ b/src/__tests__/test-components/CommitMessage.spec.tsx @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-empty-function */ import { nullTranslator } from '@jupyterlab/translation'; -import Input from '@material-ui/core/Input'; +import Input from '@mui/material/Input'; import { shallow } from 'enzyme'; import 'jest'; import * as React from 'react'; diff --git a/src/__tests__/test-components/ManageRemoteDialogue.spec.tsx b/src/__tests__/test-components/ManageRemoteDialogue.spec.tsx index 4251c109d..84b446883 100644 --- a/src/__tests__/test-components/ManageRemoteDialogue.spec.tsx +++ b/src/__tests__/test-components/ManageRemoteDialogue.spec.tsx @@ -15,7 +15,7 @@ import { defaultMockedResponses, DEFAULT_REPOSITORY_PATH } from '../utils'; -import ClearIcon from '@material-ui/icons/Clear'; +import ClearIcon from '@mui/icons-material/Clear'; import { nullTranslator } from '@jupyterlab/translation'; jest.mock('../../git'); diff --git a/src/commandsAndMenu.tsx b/src/commandsAndMenu.tsx index dfa0ff0eb..077b8f8a7 100644 --- a/src/commandsAndMenu.tsx +++ b/src/commandsAndMenu.tsx @@ -11,12 +11,12 @@ import { } from '@jupyterlab/apputils'; import { PathExt, URLExt } from '@jupyterlab/coreutils'; import { FileBrowser, FileBrowserModel } from '@jupyterlab/filebrowser'; -import { Contents, ContentsManager } from '@jupyterlab/services'; +import { Contents } from '@jupyterlab/services'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { ITerminal } from '@jupyterlab/terminal'; import { ITranslator, TranslationBundle } from '@jupyterlab/translation'; import { closeIcon, ContextMenuSvg } from '@jupyterlab/ui-components'; -import { ArrayExt, find, toArray } from '@lumino/algorithm'; +import { ArrayExt } from '@lumino/algorithm'; import { CommandRegistry } from '@lumino/commands'; import { PromiseDelegate } from '@lumino/coreutils'; import { Message } from '@lumino/messaging'; @@ -586,7 +586,7 @@ export function addCommands( // Get the index of the most recent tab opened let tabPosition = -1; - const tabBar = find(dockPanel.tabBars(), bar => { + const tabBar = Array.from(dockPanel.tabBars()).find(bar => { tabPosition = bar.titles.indexOf(diffWidget.title); return tabPosition !== -1; }); @@ -1249,7 +1249,7 @@ export function addCommands( // If the diff is on the current file and it is updated => diff model changed if (diffContext.currentRef === Git.Diff.SpecialRef.WORKING) { const updateCurrent = ( - m: ContentsManager, + m: Contents.IManager, change: Contents.IChangedArgs ) => { const updateAt = new Date( @@ -1749,7 +1749,7 @@ export function addFileBrowserContextMenu( const wasShown = menu.isVisible; const parent = menu.parentMenu; - const items = toArray(filebrowser.selectedItems().next().value); + const items = Array.from(filebrowser.selectedItems()); const statuses = new Set( items .map(item => diff --git a/src/components/Alert.tsx b/src/components/Alert.tsx index 29b25b31e..c9eb34cba 100644 --- a/src/components/Alert.tsx +++ b/src/components/Alert.tsx @@ -1,10 +1,7 @@ import { TranslationBundle } from '@jupyterlab/translation'; -import { Dialog, showDialog, showErrorMessage } from '@jupyterlab/apputils'; -import { Button } from '@material-ui/core'; -import Portal from '@material-ui/core/Portal'; -import Slide from '@material-ui/core/Slide'; -import Snackbar from '@material-ui/core/Snackbar'; -import { Color, default as MuiAlert } from '@material-ui/lab/Alert'; +import Portal from '@mui/material/Portal'; +import Slide from '@mui/material/Slide'; +import Snackbar from '@mui/material/Snackbar'; import * as React from 'react'; /** @@ -60,7 +57,7 @@ export interface IAlertProps { /** * Alert severity. */ - severity?: Color; + severity?: string; /** * The application language translator. @@ -95,7 +92,7 @@ export class Alert extends React.Component { duration = this.props.duration || 5000; // milliseconds } - let action: React.ReactNode; + /* let action: React.ReactNode; if (this.props.error) { action = ( ); - } + }*/ return ( @@ -144,9 +141,12 @@ export class Alert extends React.Component { onClick={this._onClick} onClose={this._onClose} > - + {/* + {this.props.message || this.props.trans.__('(missing message)')} + */} +

{this.props.message || this.props.trans.__('(missing message)')} - +

); diff --git a/src/components/BranchMenu.tsx b/src/components/BranchMenu.tsx index a40df0476..e45c098a5 100644 --- a/src/components/BranchMenu.tsx +++ b/src/components/BranchMenu.tsx @@ -1,9 +1,9 @@ import { Dialog, showDialog, showErrorMessage } from '@jupyterlab/apputils'; import { TranslationBundle } from '@jupyterlab/translation'; import { CommandRegistry } from '@lumino/commands'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ClearIcon from '@material-ui/icons/Clear'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ClearIcon from '@mui/icons-material/Clear'; import * as React from 'react'; import { FixedSizeList, ListChildComponentProps } from 'react-window'; import { classes } from 'typestyle'; diff --git a/src/components/BranchPicker.tsx b/src/components/BranchPicker.tsx index d4ba09815..71f3f74e4 100644 --- a/src/components/BranchPicker.tsx +++ b/src/components/BranchPicker.tsx @@ -1,8 +1,8 @@ import { TranslationBundle } from '@jupyterlab/translation'; -import Dialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; -import ListItem from '@material-ui/core/ListItem'; -import ClearIcon from '@material-ui/icons/Clear'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import ListItem from '@mui/material/ListItem'; +import ClearIcon from '@mui/icons-material/Clear'; import React from 'react'; import { FixedSizeList, ListChildComponentProps } from 'react-window'; import { classes } from 'typestyle'; diff --git a/src/components/CommitBox.tsx b/src/components/CommitBox.tsx index 88593d978..3f9e38921 100644 --- a/src/components/CommitBox.tsx +++ b/src/components/CommitBox.tsx @@ -1,14 +1,14 @@ import { TranslationBundle } from '@jupyterlab/translation'; import { checkIcon } from '@jupyterlab/ui-components'; import { CommandRegistry } from '@lumino/commands'; -import Button from '@material-ui/core/Button'; -import ButtonGroup from '@material-ui/core/ButtonGroup'; -import ClickAwayListener from '@material-ui/core/ClickAwayListener'; -import Grow from '@material-ui/core/Grow'; -import MenuItem from '@material-ui/core/MenuItem'; -import MenuList from '@material-ui/core/MenuList'; -import Paper from '@material-ui/core/Paper'; -import Popper from '@material-ui/core/Popper'; +import Button from '@mui/material/Button'; +import ButtonGroup from '@mui/material/ButtonGroup'; +import ClickAwayListener from '@mui/material/ClickAwayListener'; +import Grow from '@mui/material/Grow'; +import MenuItem from '@mui/material/MenuItem'; +import MenuList from '@mui/material/MenuList'; +import Paper from '@mui/material/Paper'; +import Popper from '@mui/material/Popper'; import * as React from 'react'; import { classes } from 'typestyle'; import { listItemIconClass } from '../style/BranchMenu'; @@ -311,9 +311,7 @@ export class CommitBox extends React.Component< /** * Close the commit variant menu if needed. */ - private _handleClose = ( - event: React.MouseEvent - ): void => { + private _handleClose = (event: MouseEvent | TouchEvent): void => { if ( this._anchorRef.current && this._anchorRef.current.contains(event.target as HTMLElement) diff --git a/src/components/CommitMessage.tsx b/src/components/CommitMessage.tsx index 784233de3..1a51fc405 100644 --- a/src/components/CommitMessage.tsx +++ b/src/components/CommitMessage.tsx @@ -1,5 +1,5 @@ import { TranslationBundle } from '@jupyterlab/translation'; -import Input from '@material-ui/core/Input'; +import Input from '@mui/material/Input'; import * as React from 'react'; import { activeStyle, diff --git a/src/components/Feedback.tsx b/src/components/Feedback.tsx index 7c174dbda..1ab472bd8 100644 --- a/src/components/Feedback.tsx +++ b/src/components/Feedback.tsx @@ -1,12 +1,11 @@ import { TranslationBundle } from '@jupyterlab/translation'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; -import { Color } from '@material-ui/lab/Alert'; import * as React from 'react'; import { ILogMessage, Level } from '../tokens'; import { Alert } from './Alert'; import { SuspendModal } from './SuspendModal'; -const LEVEL_TO_SEVERITY: Map = new Map([ +const LEVEL_TO_SEVERITY: Map = new Map([ [Level.ERROR, 'error'], [Level.WARNING, 'warning'], [Level.SUCCESS, 'success'], diff --git a/src/components/GitPanel.tsx b/src/components/GitPanel.tsx index c12560aa6..0b2ce23c5 100644 --- a/src/components/GitPanel.tsx +++ b/src/components/GitPanel.tsx @@ -6,8 +6,8 @@ import { TranslationBundle } from '@jupyterlab/translation'; import { CommandRegistry } from '@lumino/commands'; import { JSONObject } from '@lumino/coreutils'; import { Signal } from '@lumino/signaling'; -import Tab from '@material-ui/core/Tab'; -import Tabs from '@material-ui/core/Tabs'; +import Tab from '@mui/material/Tab'; +import Tabs from '@mui/material/Tabs'; import * as React from 'react'; import { Logger } from '../logger'; import { GitExtension } from '../model'; diff --git a/src/components/ManageRemoteDialogue.tsx b/src/components/ManageRemoteDialogue.tsx index 6c101a40a..eded89320 100644 --- a/src/components/ManageRemoteDialogue.tsx +++ b/src/components/ManageRemoteDialogue.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; -import ClearIcon from '@material-ui/icons/Clear'; -import Dialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; +import ClearIcon from '@mui/icons-material/Clear'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; import { TranslationBundle } from '@jupyterlab/translation'; import { showErrorMessage } from '@jupyterlab/apputils'; import { ActionButton } from './ActionButton'; diff --git a/src/components/NewBranchDialog.tsx b/src/components/NewBranchDialog.tsx index a758765c7..7680b3537 100644 --- a/src/components/NewBranchDialog.tsx +++ b/src/components/NewBranchDialog.tsx @@ -1,7 +1,7 @@ -import Dialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; -import ListItem from '@material-ui/core/ListItem'; -import ClearIcon from '@material-ui/icons/Clear'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import ListItem from '@mui/material/ListItem'; +import ClearIcon from '@mui/icons-material/Clear'; import { TranslationBundle } from '@jupyterlab/translation'; import * as React from 'react'; import { ListChildComponentProps, VariableSizeList } from 'react-window'; diff --git a/src/components/ResetRevertDialog.tsx b/src/components/ResetRevertDialog.tsx index 24f21b0d3..b40449f63 100644 --- a/src/components/ResetRevertDialog.tsx +++ b/src/components/ResetRevertDialog.tsx @@ -1,7 +1,7 @@ import { TranslationBundle } from '@jupyterlab/translation'; -import Dialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; -import ClearIcon from '@material-ui/icons/Clear'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import ClearIcon from '@mui/icons-material/Clear'; import * as React from 'react'; import { classes } from 'typestyle'; import { Logger } from '../logger'; diff --git a/src/components/StatusWidget.tsx b/src/components/StatusWidget.tsx index b51bd2530..80560ba6d 100644 --- a/src/components/StatusWidget.tsx +++ b/src/components/StatusWidget.tsx @@ -2,7 +2,7 @@ import { ReactWidget, UseSignal } from '@jupyterlab/apputils'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { IStatusBar } from '@jupyterlab/statusbar'; import { TranslationBundle } from '@jupyterlab/translation'; -import { Badge } from '@material-ui/core'; +import { Badge } from '@mui/material'; import React from 'react'; import { classes } from 'typestyle'; import { Operation, showGitOperationDialog } from '../commandsAndMenu'; diff --git a/src/components/SuspendModal.tsx b/src/components/SuspendModal.tsx index f01f6dfd2..888d84a61 100644 --- a/src/components/SuspendModal.tsx +++ b/src/components/SuspendModal.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import Modal from '@material-ui/core/Modal'; -import CircularProgress from '@material-ui/core/CircularProgress'; +import Modal from '@mui/material/Modal'; +import CircularProgress from '@mui/material/CircularProgress'; import { fullscreenProgressClass } from '../style/SuspendModal'; /** diff --git a/src/components/TagMenu.tsx b/src/components/TagMenu.tsx index c804dcb20..a107004d8 100644 --- a/src/components/TagMenu.tsx +++ b/src/components/TagMenu.tsx @@ -1,8 +1,8 @@ import { Dialog, showDialog, showErrorMessage } from '@jupyterlab/apputils'; import { TranslationBundle } from '@jupyterlab/translation'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ClearIcon from '@material-ui/icons/Clear'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ClearIcon from '@mui/icons-material/Clear'; import * as React from 'react'; import { FixedSizeList, ListChildComponentProps } from 'react-window'; import { Logger } from '../logger'; diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index d92d2d1e6..84470b9a5 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -5,7 +5,7 @@ import { refreshIcon } from '@jupyterlab/ui-components'; import { CommandRegistry } from '@lumino/commands'; -import { Badge, Tab, Tabs } from '@material-ui/core'; +import { Badge, Tab, Tabs } from '@mui/material'; import * as React from 'react'; import { classes } from 'typestyle'; import { Logger } from '../logger'; diff --git a/src/components/WarningBox.tsx b/src/components/WarningBox.tsx index e075fcc84..06c3df596 100644 --- a/src/components/WarningBox.tsx +++ b/src/components/WarningBox.tsx @@ -1,6 +1,6 @@ -import { CardContent } from '@material-ui/core'; -import Card from '@material-ui/core/Card'; -import CardHeader from '@material-ui/core/CardHeader'; +import { CardContent } from '@mui/material'; +import Card from '@mui/material/Card'; +import CardHeader from '@mui/material/CardHeader'; import * as React from 'react'; import { commitRoot, diff --git a/src/components/diff/NotebookDiff.ts b/src/components/diff/NotebookDiff.ts index 5680aa7d8..d77447ede 100644 --- a/src/components/diff/NotebookDiff.ts +++ b/src/components/diff/NotebookDiff.ts @@ -107,7 +107,10 @@ export const createNotebookDiff = async ( if (model.hasConflict) { // Move merge notebook controls in the toolbar - toolbar.addItem('clear-outputs', diffWidget.nbdimeWidget.widgets[0]); + toolbar.addItem( + 'clear-outputs', + diffWidget.nbdimeWidget.widgets[0] as any + ); } // Connect toolbar checkbox and notebook diff widget @@ -271,7 +274,7 @@ export class NotebookDiff extends Panel implements Git.Diff.IDiffWidget { while (this._scroller.widgets.length > 0) { this._scroller.widgets[0].dispose(); } - this._scroller.addWidget(this._nbdWidget); + this._scroller.addWidget(this._nbdWidget as any); try { await this._nbdWidget.init(); diff --git a/src/widgets/GitWidget.tsx b/src/widgets/GitWidget.tsx index f109aa908..878e4c521 100644 --- a/src/widgets/GitWidget.tsx +++ b/src/widgets/GitWidget.tsx @@ -5,7 +5,7 @@ import { TranslationBundle } from '@jupyterlab/translation'; import { CommandRegistry } from '@lumino/commands'; import { Message } from '@lumino/messaging'; import { Widget } from '@lumino/widgets'; -import { StylesProvider } from '@material-ui/core/styles'; +import { StylesProvider } from '@mui/styles'; import * as React from 'react'; import { Feedback } from '../components/Feedback'; import { GitPanel } from '../components/GitPanel'; From 41515753a635c8831130402f63705795f12af176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Tue, 19 Sep 2023 10:12:01 +0200 Subject: [PATCH 03/24] Post rebase upgrade --- package.json | 95 ++++++++++++++++--------------------------- src/version.ts | 2 +- ui-tests/package.json | 2 +- 3 files changed, 38 insertions(+), 61 deletions(-) diff --git a/package.json b/package.json index 5ac3409f2..60fa52503 100644 --- a/package.json +++ b/package.json @@ -59,40 +59,40 @@ ], "styleModule": "style/index.js", "dependencies": { - "@jupyterlab/application": "^3.0.0", - "@jupyterlab/apputils": "^3.0.0", - "@jupyterlab/codemirror": "^3.0.0", - "@jupyterlab/console": "^3.0.0", - "@jupyterlab/coreutils": "^5.0.0", - "@jupyterlab/docregistry": "^3.0.0", - "@jupyterlab/filebrowser": "^3.0.0", - "@jupyterlab/galata": "^4.5.2", - "@jupyterlab/mainmenu": "^3.0.0", - "@jupyterlab/nbformat": "^3.0.0", - "@jupyterlab/rendermime": "^3.0.0", - "@jupyterlab/services": "^6.0.0", - "@jupyterlab/settingregistry": "^3.0.0", - "@jupyterlab/terminal": "^3.0.0", - "@jupyterlab/translation": "^3.0.0", - "@jupyterlab/ui-components": "^3.0.0", - "@lumino/collections": "^1.2.3", - "@lumino/commands": "^1.12.0", - "@lumino/coreutils": "^1.5.3", - "@lumino/disposable": "^1.4.3", - "@lumino/messaging": "^1.7.1", - "@lumino/polling": "^1.3.3", - "@lumino/signaling": "^1.4.3", - "@lumino/widgets": "^1.17.0", - "@material-ui/core": "^4.8.2", - "@material-ui/icons": "^4.5.1", - "@material-ui/lab": "^4.0.0-alpha.54", - "@playwright/test": "^1.32.1", + "@jupyterlab/application": "^4.0.0", + "@jupyterlab/apputils": "^4.0.0", + "@jupyterlab/codemirror": "^4.0.0", + "@jupyterlab/console": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.0", + "@jupyterlab/docregistry": "^4.0.0", + "@jupyterlab/filebrowser": "^4.0.0", + "@jupyterlab/mainmenu": "^4.0.0", + "@jupyterlab/nbformat": "^4.0.0", + "@jupyterlab/rendermime": "^4.0.0", + "@jupyterlab/services": "^7.0.0", + "@jupyterlab/settingregistry": "^4.0.0", + "@jupyterlab/terminal": "^4.0.0", + "@jupyterlab/translation": "^4.0.0", + "@jupyterlab/ui-components": "^4.0.0", + "@lumino/collections": "^2.0.0", + "@lumino/commands": "^2.0.0", + "@lumino/coreutils": "^2.0.0", + "@lumino/disposable": "^2.0.0", + "@lumino/messaging": "^2.0.0", + "@lumino/polling": "^2.0.0", + "@lumino/signaling": "^2.0.0", + "@lumino/widgets": "^2.0.0", + "@mui/core": "^5.0.0-alpha.54", + "@mui/icons-material": "^5.11.16", + "@mui/lab": "^5.0.0-alpha.127", + "@mui/material": "^5.12.1", + "@mui/styles": "^5.12.0", "diff-match-patch": "^1.0.4", "filesize": "^10.0.7", - "nbdime": "^6.1.1", - "nbdime-jupyterlab": "^2.1.0", - "react": "^17.0.1", - "react-dom": "^17.0.1", + "nbdime": "^7.0.0-alpha.0", + "nbdime-jupyterlab": "^3.0.0-alpha.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-virtualized-auto-sizer": "^1.0.2", "react-window": "^1.8.5", "typestyle": "^2.0.1" @@ -100,14 +100,13 @@ "devDependencies": { "@babel/core": "^7.0.0", "@babel/preset-env": "^7.0.0", - "@jupyterlab/builder": "^3.0.0", - "@jupyterlab/testutils": "3.0.0 - 3.0.7 || ^3.0.12", - "@types/codemirror": "^0.0.97", + "@jupyterlab/builder": "^4.0.0", + "@jupyterlab/testutils": "^4.0.0", "@types/diff-match-patch": "^1.0.32", "@types/enzyme": "^3.1.15", "@types/jest": "^26.0.0", - "@types/react": "^17.0.0", - "@types/react-dom": "^17.0.0", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", "@types/react-virtualized-auto-sizer": "^1.0.0", "@types/react-window": "^1.8.2", "@types/resize-observer-browser": "^0.1.7", @@ -135,12 +134,8 @@ "stylelint-config-standard": "~34.0.0", "ts-jest": "^26.0.0", "typescript": "~4.3.5", - "yarn-dedupe": "^0.2.3", "yjs": "^13.5.40" }, - "peerDependencies": { - "codemirror": "^5.0.0" - }, "directories": { "lib": "lib" }, @@ -157,12 +152,6 @@ "url": "https://github.com/jupyterlab/jupyterlab-git/issues" }, "homepage": "https://github.com/jupyterlab/jupyterlab-git", - "resolutions": { - "react": "^17.0.0", - "react-dom": "^17.0.0", - "@types/react": "^17.0.0", - "@types/react-dom": "^17.0.0" - }, "jupyterlab": { "discovery": { "server": { @@ -187,10 +176,6 @@ "@material-ui/lab": { "singleton": true }, - "codemirror": { - "bundled": false, - "singleton": true - }, "nbdime": { "bundled": false, "singleton": true @@ -198,14 +183,6 @@ "nbdime-jupyterlab": { "bundled": false, "singleton": true - }, - "react": { - "bundled": false, - "singleton": true - }, - "react-dom": { - "bundled": false, - "singleton": true } }, "outputDir": "jupyterlab_git/labextension" diff --git a/src/version.ts b/src/version.ts index 51c5697ab..6ecddb12d 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,2 +1,2 @@ // generated by genversion -export const version = '0.41.0'; +export const version = '0.42.0'; diff --git a/ui-tests/package.json b/ui-tests/package.json index def512179..3a3287b5a 100644 --- a/ui-tests/package.json +++ b/ui-tests/package.json @@ -9,6 +9,6 @@ "test:update": "jlpm playwright test --update-snapshots" }, "devDependencies": { - "@jupyterlab/galata": "^4.5.3" + "@jupyterlab/galata": "^5.0.6" } } From 685c7171e2fb2dbbe3aabcce42435cd8b3336c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Tue, 19 Sep 2023 10:46:48 +0200 Subject: [PATCH 04/24] Apply the upgrade script --- .copier-answers.yml | 14 + .eslintignore | 6 - .eslintrc.js | 52 - .github/workflows/binder-on-pr.yml | 2 - .github/workflows/build.yml | 21 +- .github/workflows/check-release.yml | 3 - .github/workflows/prep-release.yml | 3 - .github/workflows/publish-release.yml | 2 + .../workflows/update-integration-tests.yml | 5 +- .prettierrc | 13 - .stylelintrc | 12 - .yarnrc.yml | 2 - README.md | 88 +- RELEASE.md | 14 +- binder/environment.yml | 2 +- binder/postBuild | 6 +- jest.config.js | 48 +- jupyterlab_git/tests/test_handlers.py | 1006 +---------------- package.json | 464 +++++--- pyproject.toml | 15 +- tsconfig.json | 6 +- tsconfig.test.json | 3 + ui-tests/README.md | 23 +- ui-tests/jupyter_server_test_config.py | 11 +- ui-tests/package.json | 5 +- 25 files changed, 457 insertions(+), 1369 deletions(-) create mode 100644 .copier-answers.yml delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js delete mode 100644 .prettierrc delete mode 100644 .stylelintrc diff --git a/.copier-answers.yml b/.copier-answers.yml new file mode 100644 index 000000000..1ac3b38bd --- /dev/null +++ b/.copier-answers.yml @@ -0,0 +1,14 @@ +# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY +_commit: v4.2.1 +_src_path: https://github.com/jupyterlab/extension-template +author_email: '' +author_name: Jupyter Development Team +has_binder: true +has_settings: true +kind: server +labextension_name: '@jupyterlab/git' +project_short_description: A JupyterLab extension for version control using git +python_name: jupyterlab_git +repository: https://github.com/jupyterlab/jupyterlab-git.git +test: true + diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index f4e600e15..000000000 --- a/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules -dist -coverage -**/*.d.ts -tests -ui-tests \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 718523239..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,52 +0,0 @@ -module.exports = { - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/eslint-recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:prettier/recommended', - 'plugin:react/recommended' - ], - parser: '@typescript-eslint/parser', - parserOptions: { - project: 'tsconfig.json', - sourceType: 'module' - }, - plugins: ['@typescript-eslint'], - rules: { - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'interface', - format: ['PascalCase'], - custom: { - regex: '^I[A-Z]', - match: true - } - } - ], - '@typescript-eslint/no-unused-vars': ['warn', { args: 'none' }], - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-namespace': 'off', - '@typescript-eslint/no-this-alias': [ - 'error', - { - allowedNames: ['self'] // Allow `const self = this` - } - ], - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/quotes': [ - 'error', - 'single', - { avoidEscape: true, allowTemplateLiterals: false } - ], - curly: ['error', 'all'], - eqeqeq: 'error', - 'prefer-arrow-callback': 'error' - }, - settings: { - react: { - version: 'detect' - } - } -}; diff --git a/.github/workflows/binder-on-pr.yml b/.github/workflows/binder-on-pr.yml index 47e458ef6..87e9cd29b 100644 --- a/.github/workflows/binder-on-pr.yml +++ b/.github/workflows/binder-on-pr.yml @@ -11,6 +11,4 @@ jobs: steps: - uses: jupyterlab/maintainer-tools/.github/actions/binder-link@v1 with: - github_token: ${{ secrets.github_token }} - diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 929cd10e0..454bef0a6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,9 +2,9 @@ name: Build on: push: - branches: ['main'] + branches: main pull_request: - branches: ['*'] + branches: '*' jobs: build: @@ -23,14 +23,14 @@ jobs: python_version: ${{ matrix.python-version }} - name: Install dependencies - run: python -m pip install -U jupyterlab~=3.0 + run: python -m pip install -U "jupyterlab>=4.0.0,<5" - name: Lint the extension run: | set -eux jlpm jlpm run lint:check - + - name: Test the extension run: | set -eux @@ -39,7 +39,7 @@ jobs: - name: Build the extension run: | set -eux - python -m pip install .[dev,test] + python -m pip install .[test] # Python formatting checks black . --check @@ -72,8 +72,6 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v3 - name: Install Python uses: actions/setup-python@v4 with: @@ -89,7 +87,7 @@ jobs: sudo rm -rf $(which node) sudo rm -rf $(which node) - pip install "jupyterlab~=3.0" jupyterlab_git*.whl + pip install "jupyterlab>=4.0.0,<5" jupyterlab_git*.whl jupyter server extension list @@ -97,7 +95,7 @@ jobs: jupyter labextension list jupyter labextension list 2>&1 | grep -ie "@jupyterlab/git.*OK" - python -m jupyterlab.browser_check --no-chrome-test + python -m jupyterlab.browser_check --no-browser-test integration-tests: name: Integration tests @@ -118,15 +116,16 @@ jobs: uses: actions/download-artifact@v3 with: name: extension-artifacts - + - name: Install the extension run: | set -eux - python -m pip install "jupyterlab~=3.0" jupyter-archive jupyterlab_git*.whl + python -m pip install "jupyterlab>=4.0.0,<5" jupyter-archive jupyterlab_git*.whl - name: Install dependencies working-directory: ui-tests env: + YARN_ENABLE_IMMUTABLE_INSTALLS: 0 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: jlpm install diff --git a/.github/workflows/check-release.yml b/.github/workflows/check-release.yml index 17353384a..b16e196c4 100644 --- a/.github/workflows/check-release.yml +++ b/.github/workflows/check-release.yml @@ -13,9 +13,6 @@ jobs: uses: actions/checkout@v3 - name: Base Setup uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - - name: Install Dependencies - run: | - pip install -e . - name: Check Release uses: jupyter-server/jupyter_releaser/.github/actions/check-release@v2 with: diff --git a/.github/workflows/prep-release.yml b/.github/workflows/prep-release.yml index 4903ce376..6f0928106 100644 --- a/.github/workflows/prep-release.yml +++ b/.github/workflows/prep-release.yml @@ -25,7 +25,6 @@ jobs: steps: - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - - name: Prep Release id: prep-release uses: jupyter-server/jupyter_releaser/.github/actions/prep-release@v2 @@ -33,7 +32,6 @@ jobs: token: ${{ secrets.ADMIN_GITHUB_TOKEN }} version_spec: ${{ github.event.inputs.version_spec }} post_version_spec: ${{ github.event.inputs.post_version_spec }} - target: ${{ github.event.inputs.target }} branch: ${{ github.event.inputs.branch }} since: ${{ github.event.inputs.since }} since_last_stable: ${{ github.event.inputs.since_last_stable }} @@ -41,4 +39,3 @@ jobs: - name: "** Next Step **" run: | echo "Optional): Review Draft Release: ${{ steps.prep-release.outputs.release_url }}" - diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 5c8368b93..288b33c6a 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -16,6 +16,8 @@ jobs: publish_release: runs-on: ubuntu-latest permissions: + # This is useful if you want to use PyPI trusted publisher + # and NPM provenance id-token: write steps: - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 diff --git a/.github/workflows/update-integration-tests.yml b/.github/workflows/update-integration-tests.yml index 19517c532..92fc6db56 100644 --- a/.github/workflows/update-integration-tests.yml +++ b/.github/workflows/update-integration-tests.yml @@ -9,8 +9,6 @@ permissions: pull-requests: write jobs: - - update-snapshots: if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, 'please update playwright snapshots') }} runs-on: ubuntu-latest @@ -35,7 +33,7 @@ jobs: python_version: '3.10' - name: Install dependencies - run: python -m pip install -U "jupyterlab>=4.0.0b0,<5" jupyter-archive + run: python -m pip install -U "jupyterlab>=4.0.0,<5" jupyter-archive - name: Install extension run: | @@ -49,4 +47,3 @@ jobs: # Playwright knows how to start JupyterLab server start_server_script: 'null' test_folder: ui-tests - diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index b20f16eb5..000000000 --- a/.prettierrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "none", - "arrowParens": "avoid", - "overrides": [ - { - "files": "package.json", - "options": { - "tabWidth": 4 - } - } - ] -} diff --git a/.stylelintrc b/.stylelintrc deleted file mode 100644 index b8dfcc4bb..000000000 --- a/.stylelintrc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": [ - "stylelint-config-recommended", - "stylelint-config-standard" - ], - "rules": { - "property-no-vendor-prefix": null, - "selector-class-pattern": null, - "selector-no-vendor-prefix": null, - "value-no-vendor-prefix": null - } -} \ No newline at end of file diff --git a/.yarnrc.yml b/.yarnrc.yml index fe1125f54..3186f3f07 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -1,3 +1 @@ -enableImmutableInstalls: false - nodeLinker: node-modules diff --git a/README.md b/README.md index 8b515a7d2..f45010773 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,13 @@ To see the extension in action, open the example notebook included in the Binder ## Requirements -- JupyterLab >= 3.0, < 4 ([older version](https://github.com/jupyterlab/jupyterlab-git/tree/jlab-2) available for 2.x) +- JupyterLab >= 4.0 ([older version] available for 2.x) - Git (version `>=2.x`) +For older versions of JupyterLab, go to: +- [3.x branch](https://github.com/jupyterlab/jupyterlab-git/tree/jlab-3) +- [2.x branch](https://github.com/jupyterlab/jupyterlab-git/tree/jlab-2) + ## Usage - Open the Git extension from the _Git_ tab on the left panel @@ -35,16 +39,12 @@ or with _conda_: conda install -c conda-forge "jupyterlab<4" jupyterlab-git ``` -For JupyterLab < 3, you will need to run the following command after installing the package: +## Uninstall -```bash -jupyter lab build -``` - -### Uninstall +To remove the extension, execute: ```bash -pip uninstall jupyterlab-git +pip uninstall jupyterlab_git ``` or with _conda_: @@ -53,12 +53,6 @@ or with _conda_: conda remove jupyterlab-git ``` -For JupyterLab < 3, you will also need to run the following command after removing the Python package: - -```bash -jupyter labextension uninstall @jupyterlab/git -``` - ## Settings ### Authentication to remote repository hosts @@ -143,10 +137,17 @@ Or equivalently in `$HOME/.jupyter/jupyter_notebook_config.json` (on Windows `%U ## Troubleshoot -Before consulting the following list, be sure the `jupyterlab_git` server extension and the `@jupyterlab/git` frontend extension have the same version by executing the following commands: +If you are seeing the frontend extension, but it is not working, check +that the server extension is enabled: ```bash jupyter server extension list +``` + +If the server extension is installed and enabled, but you are not seeing +the frontend extension, check the frontend extension is installed: + +```bash jupyter labextension list ``` @@ -190,7 +191,7 @@ Possible fixes: If you see `@jupyterlab/git` under `Uninstalled core extensions: `, your installation may have been corrupted. You can run `jupyter lab clean --all` and reinstall all your extensions. - + ## Contributing @@ -212,7 +213,7 @@ git clone https://github.com/jupyterlab/jupyterlab-git.git # Change directory to the jupyterlab-git directory cd jupyterlab-git # Install package in development mode -pip install -e ".[dev]" +pip install -e ".[test]" pre-commit install # Link your development version of the extension with JupyterLab jupyter labextension develop . --overwrite @@ -239,13 +240,60 @@ By default, the `jlpm run build` command generates the source maps for this exte jupyter lab build --minimize=False ``` -To execute the tests +### Development uninstall ```bash -pytest jupyterlab_git -jlpm run test +# Server extension must be manually disabled in develop mode +jupyter server extension disable jupyterlab_git +pip uninstall jupyterlab_git +``` + +In development mode, you will also need to remove the symlink created by `jupyter labextension develop` +command. To find its location, you can run `jupyter labextension list` to figure out where the `labextensions` +folder is located. Then you can remove the symlink named `@jupyterlab/git` within that folder. + +### Testing the extension + +#### Server tests + +This extension is using [Pytest](https://docs.pytest.org/) for Python code testing. + +Install test dependencies (needed only once): + +```sh +pip install -e ".[test]" +# Each time you install the Python package, you need to restore the front-end extension link +jupyter labextension develop . --overwrite ``` +To execute them, run: + +```sh +pytest -vv -r ap --cov jupyterlab_git +``` + +#### Frontend tests + +This extension is using [Jest](https://jestjs.io/) for JavaScript code testing. + +To execute them, execute: + +```sh +jlpm +jlpm test +``` + +#### Integration tests + +This extension uses [Playwright](https://playwright.dev/docs/intro) for the integration tests (aka user level tests). +More precisely, the JupyterLab helper [Galata](https://github.com/jupyterlab/jupyterlab/tree/master/galata) is used to handle testing the extension in JupyterLab. + +More information are provided within the [ui-tests](./ui-tests/README.md) README. + +### Packaging the extension + +See [RELEASE](RELEASE.md) + ## Contributors ✨ The Jupyter Git extension is part of [Project Jupyter](http://jupyter.org/) and is developed by an open community of contributors. To see who has been active recently, please look at the ["Contributors"](https://github.com/jupyterlab/jupyterlab-git/graphs/contributors) tab. Below we list the people and entities who contributed in different ways to the project ([emoji key](https://allcontributors.org/docs/en/emoji-key)): diff --git a/RELEASE.md b/RELEASE.md index 96b781e3b..1fbffa490 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -64,7 +64,19 @@ Check out the [workflow documentation](https://jupyter-releaser.readthedocs.io/e Here is a summary of the steps to cut a new release: -- Add `ADMIN_GITHUB_TOKEN`, `PYPI_TOKEN` and `NPM_TOKEN` to the [Github Secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) in the repository +- Add tokens to the [Github Secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) in the repository: + - `ADMIN_GITHUB_TOKEN` (with "public_repo" and "repo:status" permissions); see the [documentation](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) + - `NPM_TOKEN` (with "automation" permission); see the [documentation](https://docs.npmjs.com/creating-and-viewing-access-tokens) +- Set up PyPI + +
Using PyPI trusted publisher (modern way) + +- Set up your PyPI project by [adding a trusted publisher](https://docs.pypi.org/trusted-publishers/adding-a-publisher/) + - The _workflow name_ is `publish-release.yml` and the _environment_ should be left blank. +- Ensure the publish release job as `permissions`: `id-token : write` (see the [documentation](https://docs.pypi.org/trusted-publishers/using-a-publisher/)) + +
+ - Go to the Actions panel - Run the "Step 1: Prep Release" workflow - Check the draft changelog diff --git a/binder/environment.yml b/binder/environment.yml index 574887423..2e3545997 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -12,7 +12,7 @@ channels: dependencies: # runtime dependencies - python >=3.10,<3.11.0a0 - - jupyterlab >=4.0.0b0,<5 + - jupyterlab >=4.0.0,<5 # labextension build dependencies - nodejs >=18,<19 - pip diff --git a/binder/postBuild b/binder/postBuild index 06a528c4a..234b598ab 100755 --- a/binder/postBuild +++ b/binder/postBuild @@ -15,11 +15,10 @@ from pathlib import Path ROOT = Path.cwd() - def _(*args, **kwargs): - """Run a command, echoing the args + """ Run a command, echoing the args - fails hard if something goes wrong + fails hard if something goes wrong """ print("\n\t", " ".join(args), "\n") return_code = subprocess.call(args, **kwargs) @@ -27,7 +26,6 @@ def _(*args, **kwargs): print("\nERROR", return_code, " ".join(args)) sys.exit(return_code) - # verify the environment is self-consistent before even starting _(sys.executable, "-m", "pip", "check") diff --git a/jest.config.js b/jest.config.js index 65cfbd281..cb0c20a71 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,32 +1,21 @@ const jestJupyterLab = require('@jupyterlab/testutils/lib/jest-config'); -const baseConfig = jestJupyterLab(__dirname); - -const jlabConfig = jestJupyterLab(__dirname); +const esModules = [ + '@codemirror', + '@jupyter/ydoc', + '@jupyterlab/', + 'lib0', + 'nanoid', + 'vscode-ws-jsonrpc', + 'y-protocols', + 'y-websocket', + 'yjs' +].join('|'); -const { - moduleFileExtensions, - moduleNameMapper, - preset, - setupFilesAfterEnv, - testPathIgnorePatterns, - transform -} = jlabConfig; +const baseConfig = jestJupyterLab(__dirname); module.exports = { - moduleFileExtensions, - moduleNameMapper, - modulePathIgnorePatterns: [ - '/build', - '/jupyterlab_git', - '/jupyter-config', - '/ui-tests' - ], - preset, - setupFilesAfterEnv, - setupFiles: ['/testutils/jest-setup-files.js'], - testPathIgnorePatterns, - transform, + ...baseConfig, automock: false, collectCoverageFrom: [ 'src/**/*.{ts,tsx}', @@ -35,11 +24,12 @@ module.exports = { ], coverageDirectory: 'coverage', coverageReporters: ['lcov', 'text'], - globals: { - 'ts-jest': { - tsconfig: 'tsconfig.test.json' - } - }, + modulePathIgnorePatterns: [ + '/build', + '/jupyterlab_git', + '/jupyter-config', + '/ui-tests' + ], testRegex: 'src/.*/.*.spec.ts[x]?$', transformIgnorePatterns: [`/node_modules/(?!${esModules}).+`] }; diff --git a/jupyterlab_git/tests/test_handlers.py b/jupyterlab_git/tests/test_handlers.py index c3cba625d..b854ad0c2 100644 --- a/jupyterlab_git/tests/test_handlers.py +++ b/jupyterlab_git/tests/test_handlers.py @@ -51,1011 +51,9 @@ async def test_all_history_handler_localbranch(mock_git, jp_fetch, jp_root_dir): mock_git.status.return_value = maybe_future(status) # When - body = {"history_count": 25} - response = await jp_fetch( - NAMESPACE, local_path.name, "all_history", body=json.dumps(body), method="POST" - ) - - # Then - mock_git.show_top_level.assert_called_with(str(local_path)) - mock_git.branch.assert_called_with(str(local_path)) - mock_git.log.assert_called_with(str(local_path), 25) - mock_git.status.assert_called_with(str(local_path)) - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == { - "code": show_top_level["code"], - "data": { - "show_top_level": show_top_level, - "branch": branch, - "log": log, - "status": status, - }, - } - - -@patch("jupyterlab_git.git.execute") -async def test_git_show_prefix(mock_execute, jp_fetch, jp_root_dir): - # Given - path = "path/to/repo" - - local_path = jp_root_dir / "test_path" - - mock_execute.return_value = maybe_future((0, str(path), "")) - - # When - response = await jp_fetch( - NAMESPACE, - local_path.name + "/subfolder", - "show_prefix", - body="{}", - method="POST", - ) - - # Then - assert response.code == 200 - payload = json.loads(response.body) - assert payload["path"] == str(path) - mock_execute.assert_has_calls( - [ - call( - ["git", "rev-parse", "--show-prefix"], - cwd=str(local_path / "subfolder"), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - ] - ) - - -async def test_git_show_prefix_for_excluded_path( - jp_fetch, jp_server_config, jp_root_dir -): - local_path = jp_root_dir / "ignored-path" - - try: - response = await jp_fetch( - NAMESPACE, - local_path.name + "/subdir", - "show_prefix", - body="{}", - method="POST", - ) - except HTTPClientError as e: - assert e.code == 404 - - -@patch("jupyterlab_git.git.execute") -async def test_git_show_prefix_not_a_git_repo(mock_execute, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - - mock_execute.return_value = maybe_future( - (128, "", "fatal: not a git repository (or any") - ) - - # When - response = await jp_fetch( - NAMESPACE, - local_path.name + "/subfolder", - "show_prefix", - body="{}", - method="POST", - ) - - # Then - assert response.code == 200 - payload = json.loads(response.body) - assert payload["path"] is None - mock_execute.assert_has_calls( - [ - call( - ["git", "rev-parse", "--show-prefix"], - cwd=str(local_path / "subfolder"), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - ] - ) - - -@patch("jupyterlab_git.git.execute") -async def test_git_show_top_level(mock_execute, jp_fetch, jp_root_dir): - # Given - path = "path/to/repo" - - local_path = jp_root_dir / "test_path" - - mock_execute.return_value = maybe_future((0, str(path), "")) - - # When - response = await jp_fetch( - NAMESPACE, - local_path.name + "/subfolder", - "show_top_level", - body="{}", - method="POST", - ) - - # Then - assert response.code == 200 - payload = json.loads(response.body) - assert payload["path"] == str(path) - mock_execute.assert_has_calls( - [ - call( - ["git", "rev-parse", "--show-toplevel"], - cwd=str(local_path / "subfolder"), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - ] - ) - - -@patch("jupyterlab_git.git.execute") -async def test_git_show_top_level_not_a_git_repo(mock_execute, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - - mock_execute.return_value = maybe_future( - (128, "", "fatal: not a git repository (or any") - ) - - # When - response = await jp_fetch( - NAMESPACE, - local_path.name + "/subfolder", - "show_top_level", - body="{}", - method="POST", - ) - - # Then - assert response.code == 200 - payload = json.loads(response.body) - assert payload["path"] is None - mock_execute.assert_has_calls( - [ - call( - ["git", "rev-parse", "--show-toplevel"], - cwd=str(local_path / "subfolder"), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - ] - ) - - -@patch("jupyterlab_git.handlers.GitBranchHandler.git", spec=Git) -async def test_branch_handler_localbranch(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - branch = { - "code": 0, - "branches": [ - { - "is_current_branch": True, - "is_remote_branch": False, - "name": "feature-foo", - "upstream": "origin/feature-foo", - "top_commit": "abcdefghijklmnopqrstuvwxyz01234567890123", - "tag": None, - }, - { - "is_current_branch": False, - "is_remote_branch": False, - "name": "main", - "upstream": "origin/main", - "top_commit": "abcdefghijklmnopqrstuvwxyz01234567890123", - "tag": None, - }, - { - "is_current_branch": False, - "is_remote_branch": False, - "name": "feature-bar", - "upstream": None, - "top_commit": "01234567899999abcdefghijklmnopqrstuvwxyz", - "tag": None, - }, - { - "is_current_branch": False, - "is_remote_branch": True, - "name": "origin/feature-foo", - "upstream": None, - "top_commit": "abcdefghijklmnopqrstuvwxyz01234567890123", - "tag": None, - }, - { - "is_current_branch": False, - "is_remote_branch": True, - "name": "origin/main", - "upstream": None, - "top_commit": "abcdefghijklmnopqrstuvwxyz01234567890123", - "tag": None, - }, - ], - } - - mock_git.branch.return_value = maybe_future(branch) - - # When - response = await jp_fetch( - NAMESPACE, local_path.name, "branch", body="{}", method="POST" - ) - - # Then - mock_git.branch.assert_called_with(str(local_path)) - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == {"code": 0, "branches": branch["branches"]} - - -@patch("jupyterlab_git.handlers.GitLogHandler.git", spec=Git) -async def test_log_handler(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - log = {"code": 0, "commits": []} - mock_git.log.return_value = maybe_future(log) - - # When - body = {"history_count": 20} - response = await jp_fetch( - NAMESPACE, local_path.name, "log", body=json.dumps(body), method="POST" - ) - - # Then - mock_git.log.assert_called_with(str(local_path), 20, None) - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == log - - -@patch("jupyterlab_git.handlers.GitLogHandler.git", spec=Git) -async def test_log_handler_no_history_count(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - log = {"code": 0, "commits": []} - mock_git.log.return_value = maybe_future(log) - - # When - response = await jp_fetch( - NAMESPACE, local_path.name, "log", body="{}", method="POST" - ) - - # Then - mock_git.log.assert_called_with(str(local_path), 25, None) - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == log - - -@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) -async def test_push_handler_localbranch(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - mock_git.get_current_branch.return_value = maybe_future("localbranch") - mock_git.get_upstream_branch.return_value = maybe_future( - {"code": 0, "remote_short_name": ".", "remote_branch": "localbranch"} - ) - mock_git.push.return_value = maybe_future({"code": 0}) - - # When - response = await jp_fetch( - NAMESPACE, local_path.name, "push", body="{}", method="POST" - ) - - # Then - mock_git.get_current_branch.assert_called_with(str(local_path)) - mock_git.get_upstream_branch.assert_called_with(str(local_path), "localbranch") - mock_git.push.assert_called_with( - ".", "HEAD:localbranch", str(local_path), None, False, False - ) - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == {"code": 0} - - -@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) -async def test_push_handler_remotebranch(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - mock_git.get_current_branch.return_value = maybe_future("foo/bar") - upstream = { - "code": 0, - "remote_short_name": "origin/something", - "remote_branch": "remote-branch-name", - } - mock_git.get_upstream_branch.return_value = maybe_future(upstream) - mock_git.push.return_value = maybe_future({"code": 0}) - - # When - response = await jp_fetch( - NAMESPACE, local_path.name, "push", body="{}", method="POST" - ) - - # Then - mock_git.get_current_branch.assert_called_with(str(local_path)) - mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo/bar") - mock_git.push.assert_called_with( - "origin/something", - "HEAD:remote-branch-name", - str(local_path), - None, - False, - False, - ) - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == {"code": 0} - - -@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) -async def test_push_handler_noupstream(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - mock_git.get_current_branch.return_value = maybe_future("foo") - upstream = { - "code": 128, - "command": "", - "message": "fatal: no upstream configured for branch 'foo'", - } - mock_git.get_upstream_branch.return_value = maybe_future(upstream) - mock_git.config.return_value = maybe_future({"options": dict()}) - mock_git.remote_show.return_value = maybe_future({}) - mock_git.push.return_value = maybe_future({"code": 0}) - - # When - with pytest.raises(tornado.httpclient.HTTPClientError) as e: - await jp_fetch(NAMESPACE, local_path.name, "push", body="{}", method="POST") - - response = e.value.response - - # Then - mock_git.get_current_branch.assert_called_with(str(local_path)) - mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") - mock_git.config.assert_called_with(str(local_path)) - mock_git.remote_show.assert_called_with(str(local_path)) - mock_git.push.assert_not_called() - - assert response.code == 500 - payload = json.loads(response.body) - assert payload == { - "code": 128, - "message": "fatal: The current branch foo has no upstream branch.", - "remotes": list(), - } - - -@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) -async def test_push_handler_multipleupstream(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - remotes = ["origin", "upstream"] - mock_git.get_current_branch.return_value = maybe_future("foo") - upstream = {"code": -1, "message": "oups"} - mock_git.get_upstream_branch.return_value = maybe_future(upstream) - mock_git.config.return_value = maybe_future({"options": dict()}) - mock_git.remote_show.return_value = maybe_future({"remotes": remotes}) - mock_git.push.return_value = maybe_future({"code": 0}) - - # When - with pytest.raises(tornado.httpclient.HTTPClientError) as e: - await jp_fetch(NAMESPACE, local_path.name, "push", body="{}", method="POST") - response = e.value.response - - # Then - mock_git.get_current_branch.assert_called_with(str(local_path)) - mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") - mock_git.config.assert_called_with(str(local_path)) - mock_git.remote_show.assert_called_with(str(local_path)) - mock_git.push.assert_not_called() - - assert response.code == 500 - payload = json.loads(response.body) - assert payload == { - "code": 128, - "message": "fatal: The current branch foo has no upstream branch.", - "remotes": remotes, - } - - -@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) -async def test_push_handler_noupstream_unique_remote(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - remote = "origin" - mock_git.get_current_branch.return_value = maybe_future("foo") - upstream = {"code": -1, "message": "oups"} - mock_git.get_upstream_branch.return_value = maybe_future(upstream) - mock_git.config.return_value = maybe_future({"options": dict()}) - mock_git.remote_show.return_value = maybe_future({"remotes": [remote]}) - mock_git.push.return_value = maybe_future({"code": 0}) - - # When - response = await jp_fetch( - NAMESPACE, local_path.name, "push", body="{}", method="POST" - ) - - # Then - mock_git.get_current_branch.assert_called_with(str(local_path)) - mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") - mock_git.config.assert_called_with(str(local_path)) - mock_git.remote_show.assert_called_with(str(local_path)) - mock_git.push.assert_called_with( - remote, - "foo", - str(local_path), - None, - set_upstream=True, - force=False, - ) - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == {"code": 0} - - -@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) -async def test_push_handler_noupstream_pushdefault(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - remote = "rorigin" - mock_git.get_current_branch.return_value = maybe_future("foo") - upstream = {"code": -1, "message": "oups"} - mock_git.get_upstream_branch.return_value = maybe_future(upstream) - mock_git.config.return_value = maybe_future( - {"options": {"remote.pushdefault": remote}} - ) - mock_git.remote_show.return_value = maybe_future({"remotes": [remote, "upstream"]}) - mock_git.push.return_value = maybe_future({"code": 0}) - - # When - response = await jp_fetch( - NAMESPACE, local_path.name, "push", body="{}", method="POST" - ) - - # Then - mock_git.get_current_branch.assert_called_with(str(local_path)) - mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") - mock_git.config.assert_called_with(str(local_path)) - mock_git.remote_show.assert_called_with(str(local_path)) - mock_git.push.assert_called_with( - remote, - "foo", - str(local_path), - None, - set_upstream=True, - force=False, - ) - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == {"code": 0} - - -@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) -async def test_push_handler_noupstream_pass_remote_nobranch( - mock_git, jp_fetch, jp_root_dir -): - # Given - local_path = jp_root_dir / "test_path" - mock_git.get_current_branch.return_value = maybe_future("foo") - upstream = {"code": -1, "message": "oups"} - mock_git.get_upstream_branch.return_value = maybe_future(upstream) - mock_git.config.return_value = maybe_future({"options": dict()}) - mock_git.remote_show.return_value = maybe_future({}) - mock_git.push.return_value = maybe_future({"code": 0}) - - remote = "online" - - # When - body = {"remote": remote} - response = await jp_fetch( - NAMESPACE, local_path.name, "push", body=json.dumps(body), method="POST" - ) - - # Then - mock_git.get_current_branch.assert_called_with(str(local_path)) - mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") - mock_git.config.assert_not_called() - mock_git.remote_show.assert_not_called() - mock_git.push.assert_called_with( - remote, "HEAD:foo", str(local_path), None, True, False - ) - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == {"code": 0} - - -@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) -async def test_push_handler_noupstream_pass_remote_branch( - mock_git, jp_fetch, jp_root_dir -): - # Given - local_path = jp_root_dir / "test_path" - mock_git.get_current_branch.return_value = maybe_future("foo") - upstream = {"code": -1, "message": "oups"} - mock_git.get_upstream_branch.return_value = maybe_future(upstream) - mock_git.config.return_value = maybe_future({"options": dict()}) - mock_git.remote_show.return_value = maybe_future({}) - mock_git.push.return_value = maybe_future({"code": 0}) - - remote = "online" - remote_branch = "onfoo" - - # When - body = {"remote": "/".join((remote, remote_branch))} - response = await jp_fetch( - NAMESPACE, local_path.name, "push", body=json.dumps(body), method="POST" - ) - - # Then - mock_git.get_current_branch.assert_called_with(str(local_path)) - mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") - mock_git.config.assert_not_called() - mock_git.remote_show.assert_not_called() - mock_git.push.assert_called_with( - remote, "HEAD:" + remote_branch, str(local_path), None, True, False - ) - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == {"code": 0} - - -@patch("jupyterlab_git.handlers.GitUpstreamHandler.git", spec=Git) -async def test_upstream_handler_forward_slashes(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - mock_git.get_current_branch.return_value = maybe_future("foo/bar") - upstream = { - "code": 0, - "remote_short_name": "origin/something", - "remote_branch": "foo/bar", - } - mock_git.get_upstream_branch.return_value = maybe_future(upstream) - - # When - response = await jp_fetch( - NAMESPACE, local_path.name, "upstream", body="{}", method="POST" - ) - - # Then - mock_git.get_current_branch.assert_called_with(str(local_path)) - mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo/bar") - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == upstream - - -@patch("jupyterlab_git.handlers.GitUpstreamHandler.git", spec=Git) -async def test_upstream_handler_localbranch(mock_git, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - mock_git.get_current_branch.return_value = maybe_future("foo/bar") - upstream = {"code": 0, "remote_short_name": ".", "remote_branch": "foo/bar"} - mock_git.get_upstream_branch.return_value = maybe_future(upstream) - - # When - response = await jp_fetch( - NAMESPACE, local_path.name, "upstream", body="{}", method="POST" - ) - - # Then - mock_git.get_current_branch.assert_called_with(str(local_path)) - mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo/bar") - - assert response.code == 200 - payload = json.loads(response.body) - assert payload == upstream - - -@patch("jupyterlab_git.git.execute") -async def test_content(mock_execute, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - filename = "my/file" - content = "dummy content file\nwith multiple lines" - - mock_execute.side_effect = [ - maybe_future((0, "1\t1\t{}".format(filename), "")), - maybe_future((0, content, "")), - ] - - # When - body = { - "filename": filename, - "reference": {"git": "previous"}, - } - response = await jp_fetch( - NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" - ) - - # Then - assert response.code == 200 - payload = json.loads(response.body) - assert payload["content"] == content - mock_execute.assert_has_calls( - [ - call( - [ - "git", - "diff", - "--numstat", - "4b825dc642cb6eb9a060e54bf8d69288fbee4904", - "previous", - "--", - filename, - ], - cwd=str(local_path), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - call( - ["git", "show", "{}:{}".format("previous", filename)], - cwd=str(local_path), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - ] - ) - - -async def test_content_working(jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - filename = "my/file" - content = "dummy content file\nwith multiple lines" - - dummy_file = local_path / filename - dummy_file.parent.mkdir(parents=True) - dummy_file.write_text(content) - - # When - body = { - "filename": filename, - "reference": {"special": "WORKING"}, - } - response = await jp_fetch( - NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" - ) - - # Then - assert response.code == 200 - payload = json.loads(response.body) - assert payload["content"] == content - - -async def test_content_notebook_working(jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - filename = "my/notebook.ipynb" - content = """{ - "cells": [], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "mimetype": "text/x-python", - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} -""" - - dummy_file = local_path / filename - dummy_file.parent.mkdir(parents=True) - dummy_file.write_text(content) - - # When - body = { - "filename": filename, - "reference": {"special": "WORKING"}, - } - response = await jp_fetch( - NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" - ) - - # Then - assert response.code == 200 - payload = json.loads(response.body) - assert payload["content"] == content - - -@patch("jupyterlab_git.git.execute") -async def test_content_index(mock_execute, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - filename = "my/file" - content = "dummy content file\nwith multiple lines" - - mock_execute.side_effect = [ - maybe_future((0, "1\t1\t{}".format(filename), "")), - maybe_future((0, content, "")), - ] - - # When - body = { - "filename": filename, - "reference": {"special": "INDEX"}, - } - response = await jp_fetch( - NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" - ) - - # Then - assert response.code == 200 - payload = json.loads(response.body) - assert payload["content"] == content - mock_execute.assert_has_calls( - [ - call( - [ - "git", - "diff", - "--numstat", - "--cached", - "4b825dc642cb6eb9a060e54bf8d69288fbee4904", - "--", - filename, - ], - cwd=str(local_path), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - call( - ["git", "show", "{}:{}".format("", filename)], - cwd=str(local_path), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - ], - ) - - -@patch("jupyterlab_git.git.execute") -async def test_content_base(mock_execute, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - filename = "my/file" - content = "dummy content file\nwith multiple lines" - obj_ref = "915bb14609daab65e5304e59d89c626283ae49fc" - - mock_execute.side_effect = [ - maybe_future( - ( - 0, - "100644 {1} 1 {0}\x00100644 285bdbc14e499b85ec407512a3bb3992fa3d4082 2 {0}\x00100644 66ac842dfb0b5c20f757111d6b3edd56d80622b4 3 {0}\x00".format( - filename, obj_ref - ), - "", - ) - ), - maybe_future((0, content, "")), - ] - - # When - body = { - "filename": filename, - "reference": {"special": "BASE"}, - } - response = await jp_fetch( - NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" - ) - - # Then - assert response.code == 200 - payload = json.loads(response.body) - assert payload["content"] == content - mock_execute.assert_has_calls( - [ - call( - ["git", "ls-files", "-u", "-z", filename], - cwd=str(local_path), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - call( - ["git", "show", "915bb14609daab65e5304e59d89c626283ae49fc"], - cwd=str(local_path), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - ] - ) - - -@patch("jupyterlab_git.git.execute") -async def test_content_unknown_special(mock_execute, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - filename = "my/file" - content = "dummy content file\nwith multiple lines" - - mock_execute.side_effect = [ - maybe_future((0, "1\t1\t{}".format(filename), "")), - maybe_future((0, content, "")), - ] - - # When - body = { - "filename": filename, - "reference": {"special": "unknown"}, - } - - with pytest.raises(tornado.httpclient.HTTPClientError) as e: - await jp_fetch( - NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" - ) - assert_http_error(e, 500, expected_message="unknown special ref") - - -@patch("jupyterlab_git.git.execute") -async def test_content_show_handled_error(mock_execute, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - filename = "my/file" - - mock_execute.return_value = maybe_future( - ( - -1, - "", - "fatal: Path '{}' does not exist (neither on disk nor in the index)".format( - filename - ), - ) - ) - - # When - body = { - "filename": filename, - "reference": {"git": "current"}, - } - response = await jp_fetch( - NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" - ) - - # Then - assert response.code == 200 - payload = json.loads(response.body) - assert payload["content"] == "" - - -@patch("jupyterlab_git.git.execute") -async def test_content_binary(mock_execute, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - filename = "my/file" - - mock_execute.return_value = maybe_future((0, "-\t-\t{}".format(filename), "")) - - # When - body = { - "filename": filename, - "reference": {"git": "current"}, - } - - # Then - response = await jp_fetch( - NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" - ) - - mock_execute.assert_has_calls( - [ - call( - [ - "git", - "diff", - "--numstat", - "4b825dc642cb6eb9a060e54bf8d69288fbee4904", - "current", - "--", - filename, - ], - cwd=str(local_path), - timeout=20, - env=None, - username=None, - password=None, - is_binary=False, - ), - call( - ["git", "show", "{}:{}".format("current", filename)], - cwd=str(local_path), - timeout=20, - env=None, - username=None, - password=None, - is_binary=True, - ), - ] - ) - - -@patch("jupyterlab_git.git.execute") -async def test_content_show_unhandled_error(mock_execute, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - filename = "my/file" - - mock_execute.return_value = maybe_future((-1, "", "Dummy error")) - - # When - body = { - "filename": filename, - "reference": {"git": "current"}, - } - - # Then - with pytest.raises(tornado.httpclient.HTTPClientError) as e: - await jp_fetch( - NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" - ) - assert_http_error(e, 500, expected_message="Dummy error") - - -@patch("jupyterlab_git.git.execute") -async def test_content_getcontent_deleted_file(mock_execute, jp_fetch, jp_root_dir): - # Given - local_path = jp_root_dir / "test_path" - filename = "my/absent_file" - content = "dummy content file\nwith multiple lines" - - # When - body = { - "filename": filename, - "reference": {"special": "WORKING"}, - } - # Then - response = await jp_fetch( - NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" - ) + response = await jp_fetch("jupyterlab-git", "get-example") # Then assert response.code == 200 payload = json.loads(response.body) - assert payload["content"] == "" + assert payload == {"data": "This is /jupyterlab-git/get-example endpoint!"} diff --git a/package.json b/package.json index 60fa52503..73ac5dac9 100644 --- a/package.json +++ b/package.json @@ -1,190 +1,288 @@ { - "name": "@jupyterlab/git", - "version": "0.43.0", - "description": "A JupyterLab extension for version control using git", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "style": "style/index.css", - "license": "BSD-3-Clause", - "author": { - "name": "Jupyter Development Team" + "name": "@jupyterlab/git", + "version": "0.43.0", + "description": "A JupyterLab extension for version control using git", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "style": "style/index.css", + "license": "BSD-3-Clause", + "author": "Jupyter Development Team", + "keywords": [ + "Jupyter", + "JupyterLab", + "JupyterLab3", + "jupyterlab-extension", + "Git" + ], + "scripts": { + "build": "jlpm build:lib && jlpm build:labextension:dev", + "build:labextension": "jupyter labextension build .", + "build:labextension:dev": "jupyter labextension build --development True .", + "build:lib": "genversion --es6 --semi src/version.ts && tsc --sourceMap", + "build:lib:prod": "genversion --es6 --semi src/version.ts && tsc", + "build:prod": "jlpm clean && jlpm build:lib:prod && jlpm build:labextension", + "clean": "jlpm clean:lib", + "clean:all": "jlpm clean:lib && jlpm clean:labextension && jlpm clean:lintcache", + "clean:labextension": "rimraf jupyterlab_git/labextension jupyterlab_git/_version.py", + "clean:lib": "rimraf lib tsconfig.tsbuildinfo", + "clean:lintcache": "rimraf .eslintcache .stylelintcache", + "clean:more": "jlpm clean && rimraf build dist MANIFEST", + "clean:slate": "jlpm clean:more && jlpm clean:labextension && rimraf node_modules", + "contributors:generate": "jlpm run all-contributors generate", + "eslint": "jlpm eslint:check --fix", + "eslint:check": "eslint . --cache --ext .ts,.tsx", + "install:extension": "jlpm build", + "lint": "jlpm stylelint && jlpm prettier && jlpm eslint", + "lint:check": "jlpm stylelint:check && jlpm prettier:check && jlpm eslint:check", + "prepare": "genversion --es6 --semi src/version.ts", + "prettier": "jlpm prettier:base --write --list-different", + "prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.md}\"", + "prettier:check": "jlpm prettier:base --check", + "stylelint": "jlpm stylelint:check --fix", + "stylelint:check": "stylelint --cache \"style/**/*.css\"", + "test": "jest --coverage --no-cache", + "watch": "run-p watch:src watch:labextension", + "watch:labextension": "jupyter labextension watch .", + "watch:src": "tsc -w --sourceMap" + }, + "files": [ + "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", + "schema/**/*.{json,}", + "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "style/index.js" + ], + "sideEffects": [ + "style/*.css", + "style/index.js" + ], + "styleModule": "style/index.js", + "dependencies": { + "@jupyterlab/application": "^4.0.6", + "@jupyterlab/apputils": "^4.1.6", + "@jupyterlab/codemirror": "^4.0.6", + "@jupyterlab/console": "^4.0.6", + "@jupyterlab/coreutils": "^6.0.6", + "@jupyterlab/docregistry": "^4.0.6", + "@jupyterlab/filebrowser": "^4.0.6", + "@jupyterlab/mainmenu": "^4.0.6", + "@jupyterlab/nbformat": "^4.0.6", + "@jupyterlab/rendermime": "^4.0.6", + "@jupyterlab/services": "^7.0.6", + "@jupyterlab/settingregistry": "^4.0.6", + "@jupyterlab/terminal": "^4.0.6", + "@jupyterlab/translation": "^4.0.6", + "@jupyterlab/ui-components": "^4.0.6", + "@lumino/collections": "^2.0.0", + "@lumino/commands": "^2.0.1", + "@lumino/coreutils": "^2.0.0", + "@lumino/disposable": "^2.0.0", + "@lumino/messaging": "^2.0.0", + "@lumino/polling": "^2.0.0", + "@lumino/signaling": "^2.0.0", + "@lumino/widgets": "^2.0.1", + "@mui/core": "^5.0.0-alpha.54", + "@mui/icons-material": "^5.11.16", + "@mui/lab": "^5.0.0-alpha.127", + "@mui/material": "^5.12.1", + "@mui/styles": "^5.12.0", + "diff-match-patch": "^1.0.4", + "filesize": "^10.0.7", + "nbdime": "^7.0.0-alpha.0", + "nbdime-jupyterlab": "^3.0.0-alpha.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-virtualized-auto-sizer": "^1.0.2", + "react-window": "^1.8.5", + "typestyle": "^2.0.1" + }, + "devDependencies": { + "@babel/core": "^7.0.0", + "@babel/preset-env": "^7.0.0", + "@jupyterlab/builder": "^4.0.0", + "@jupyterlab/testutils": "^4.0.0", + "@types/diff-match-patch": "^1.0.32", + "@types/enzyme": "^3.1.15", + "@types/jest": "^29.2.0", + "@types/json-schema": "^7.0.11", + "@types/react": "^18.0.26", + "@types/react-addons-linked-state-mixin": "^0.14.22", + "@types/react-dom": "^18.2.0", + "@types/react-virtualized-auto-sizer": "^1.0.0", + "@types/react-window": "^1.8.2", + "@types/resize-observer-browser": "^0.1.7", + "@typescript-eslint/eslint-plugin": "^6.1.0", + "@typescript-eslint/parser": "^6.1.0", + "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", + "all-contributors-cli": "^6.14.0", + "css-loader": "^6.7.1", + "enzyme": "^3.7.0", + "eslint": "^8.36.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-react": "^7.33.0", + "genversion": "^2.2.1", + "husky": "^8.0.3", + "identity-obj-proxy": "^3.0.0", + "jest": "^29.2.0", + "jest-fetch-mock": "^3.0.0", + "lint-staged": "^13.2.3", + "mkdirp": "^1.0.3", + "npm-run-all": "^4.1.5", + "prettier": "^3.0.0", + "rimraf": "^5.0.1", + "source-map-loader": "^1.0.2", + "style-loader": "^3.3.1", + "stylelint": "^15.10.1", + "stylelint-config-recommended": "^13.0.0", + "stylelint-config-standard": "^34.0.0", + "stylelint-csstree-validator": "^3.0.0", + "stylelint-prettier": "^4.0.0", + "ts-jest": "^26.0.0", + "typescript": "~5.0.2", + "yjs": "^13.5.40" + }, + "directories": { + "lib": "lib" + }, + "lint-staged": { + "*.{ts,tsx}": [ + "eslint . --ext .ts,.tsx --fix" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/jupyterlab/jupyterlab-git.git" + }, + "bugs": { + "url": "https://github.com/jupyterlab/jupyterlab-git/issues" + }, + "homepage": "https://github.com/jupyterlab/jupyterlab-git", + "jupyterlab": { + "discovery": { + "server": { + "managers": [ + "pip", + "conda" + ], + "base": { + "name": "jupyterlab-git" + } + } }, - "keywords": [ - "Jupyter", - "JupyterLab", - "JupyterLab3", - "jupyterlab-extension", - "Git" + "extension": true, + "schemaDir": "schema", + "sharedPackages": { + "@material-ui/core": { + "singleton": true + }, + "@material-ui/icons": { + "singleton": true + }, + "@material-ui/lab": { + "singleton": true + }, + "nbdime": { + "bundled": false, + "singleton": true + }, + "nbdime-jupyterlab": { + "bundled": false, + "singleton": true + } + }, + "outputDir": "jupyterlab_git/labextension" + }, + "eslintConfig": { + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended" ], - "scripts": { - "build": "jlpm build:lib && jlpm build:labextension:dev", - "build:labextension": "jupyter labextension build .", - "build:labextension:dev": "jupyter labextension build --development True .", - "build:lib": "genversion --es6 --semi src/version.ts && tsc --sourceMap", - "build:lib:prod": "genversion --es6 --semi src/version.ts && tsc", - "build:prod": "jlpm clean && jlpm build:lib:prod && jlpm build:labextension", - "clean": "jlpm clean:lib", - "clean:all": "jlpm clean:lib && jlpm clean:labextension && jlpm clean:lintcache", - "clean:labextension": "rimraf jupyterlab_git/labextension jupyterlab_git/_version.py", - "clean:lib": "rimraf lib tsconfig.tsbuildinfo", - "clean:lintcache": "rimraf .eslintcache .stylelintcache", - "clean:more": "jlpm clean && rimraf build dist MANIFEST", - "clean:slate": "jlpm clean:more && jlpm clean:labextension && rimraf node_modules", - "contributors:generate": "jlpm run all-contributors generate", - "eslint": "jlpm eslint:check --fix", - "eslint:check": "eslint . --cache --ext .ts,.tsx", - "install:extension": "jlpm build", - "lint": "jlpm stylelint && jlpm prettier && jlpm eslint", - "lint:check": "jlpm stylelint:check && jlpm prettier:check && jlpm eslint:check", - "prepare": "genversion --es6 --semi src/version.ts", - "prettier": "jlpm prettier:base --write --list-different", - "prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.md}\"", - "prettier:check": "jlpm prettier:base --check", - "stylelint": "jlpm stylelint:check --fix", - "stylelint:check": "stylelint --cache \"style/**/*.css\"", - "test": "jest --coverage --no-cache", - "watch": "run-p watch:src watch:labextension", - "watch:labextension": "jupyter labextension watch .", - "watch:src": "tsc -w" + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "tsconfig.json", + "sourceType": "module" }, - "files": [ - "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "schema/**/*.{json,}", - "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}", - "style/index.js" + "plugins": [ + "@typescript-eslint" ], - "sideEffects": [ - "style/*.css", - "style/index.js" + "rules": { + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "interface", + "format": [ + "PascalCase" + ], + "custom": { + "regex": "^I[A-Z]", + "match": true + } + } + ], + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "args": "none" + } + ], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/quotes": [ + "error", + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": false + } + ], + "curly": [ + "error", + "all" + ], + "eqeqeq": "error", + "prefer-arrow-callback": "error" + } + }, + "eslintIgnore": [ + "node_modules", + "dist", + "coverage", + "**/*.d.ts", + "tests", + "**/__tests__", + "ui-tests" + ], + "prettier": { + "singleQuote": true, + "trailingComma": "none", + "arrowParens": "avoid", + "endOfLine": "auto", + "overrides": [ + { + "files": "package.json", + "options": { + "tabWidth": 4 + } + } + ] + }, + "stylelint": { + "extends": [ + "stylelint-config-recommended", + "stylelint-config-standard", + "stylelint-prettier/recommended" ], - "styleModule": "style/index.js", - "dependencies": { - "@jupyterlab/application": "^4.0.0", - "@jupyterlab/apputils": "^4.0.0", - "@jupyterlab/codemirror": "^4.0.0", - "@jupyterlab/console": "^4.0.0", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/docregistry": "^4.0.0", - "@jupyterlab/filebrowser": "^4.0.0", - "@jupyterlab/mainmenu": "^4.0.0", - "@jupyterlab/nbformat": "^4.0.0", - "@jupyterlab/rendermime": "^4.0.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/settingregistry": "^4.0.0", - "@jupyterlab/terminal": "^4.0.0", - "@jupyterlab/translation": "^4.0.0", - "@jupyterlab/ui-components": "^4.0.0", - "@lumino/collections": "^2.0.0", - "@lumino/commands": "^2.0.0", - "@lumino/coreutils": "^2.0.0", - "@lumino/disposable": "^2.0.0", - "@lumino/messaging": "^2.0.0", - "@lumino/polling": "^2.0.0", - "@lumino/signaling": "^2.0.0", - "@lumino/widgets": "^2.0.0", - "@mui/core": "^5.0.0-alpha.54", - "@mui/icons-material": "^5.11.16", - "@mui/lab": "^5.0.0-alpha.127", - "@mui/material": "^5.12.1", - "@mui/styles": "^5.12.0", - "diff-match-patch": "^1.0.4", - "filesize": "^10.0.7", - "nbdime": "^7.0.0-alpha.0", - "nbdime-jupyterlab": "^3.0.0-alpha.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-virtualized-auto-sizer": "^1.0.2", - "react-window": "^1.8.5", - "typestyle": "^2.0.1" - }, - "devDependencies": { - "@babel/core": "^7.0.0", - "@babel/preset-env": "^7.0.0", - "@jupyterlab/builder": "^4.0.0", - "@jupyterlab/testutils": "^4.0.0", - "@types/diff-match-patch": "^1.0.32", - "@types/enzyme": "^3.1.15", - "@types/jest": "^26.0.0", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.0", - "@types/react-virtualized-auto-sizer": "^1.0.0", - "@types/react-window": "^1.8.2", - "@types/resize-observer-browser": "^0.1.7", - "@typescript-eslint/eslint-plugin": "^6.1.0", - "@typescript-eslint/parser": "^6.1.0", - "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", - "all-contributors-cli": "^6.14.0", - "enzyme": "^3.7.0", - "eslint": "^8.45.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-prettier": "^5.0.0", - "eslint-plugin-react": "^7.33.0", - "genversion": "^2.2.1", - "husky": "^8.0.3", - "identity-obj-proxy": "^3.0.0", - "jest": "^26.0.0", - "jest-fetch-mock": "^3.0.0", - "lint-staged": "^13.2.3", - "mkdirp": "^1.0.3", - "npm-run-all": "^4.1.5", - "prettier": "^3.0.0", - "rimraf": "^5.0.1", - "stylelint": "^15.10.1", - "stylelint-config-recommended": "^13.0.0", - "stylelint-config-standard": "~34.0.0", - "ts-jest": "^26.0.0", - "typescript": "~4.3.5", - "yjs": "^13.5.40" - }, - "directories": { - "lib": "lib" - }, - "lint-staged": { - "*.{ts,tsx}": [ - "eslint . --ext .ts,.tsx --fix" - ] - }, - "repository": { - "type": "git", - "url": "https://github.com/jupyterlab/jupyterlab-git.git" - }, - "bugs": { - "url": "https://github.com/jupyterlab/jupyterlab-git/issues" - }, - "homepage": "https://github.com/jupyterlab/jupyterlab-git", - "jupyterlab": { - "discovery": { - "server": { - "managers": [ - "pip", - "conda" - ], - "base": { - "name": "jupyterlab-git" - } - } - }, - "extension": true, - "schemaDir": "schema", - "sharedPackages": { - "@material-ui/core": { - "singleton": true - }, - "@material-ui/icons": { - "singleton": true - }, - "@material-ui/lab": { - "singleton": true - }, - "nbdime": { - "bundled": false, - "singleton": true - }, - "nbdime-jupyterlab": { - "bundled": false, - "singleton": true - } - }, - "outputDir": "jupyterlab_git/labextension" + "plugins": [ + "stylelint-csstree-validator" + ], + "rules": { + "csstree/validator": true, + "property-no-vendor-prefix": null, + "selector-no-vendor-prefix": null, + "value-no-vendor-prefix": null } -} + } +} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index c7d866039..fb06a384a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["hatchling>=1.5.0", "jupyterlab>=4.0.0b0,<5", "hatch-nodejs-version"] +requires = ["hatchling>=1.5.0", "jupyterlab>=4.0.0,<5", "hatch-nodejs-version>=0.3.2"] build-backend = "hatchling.build" [project] @@ -22,9 +22,19 @@ classifiers = [ "Programming Language :: Python :: 3.11", ] dependencies = [ + "jupyter_server>=2.0.1,<3" ] dynamic = ["version", "description", "authors", "urls", "keywords"] +[project.optional-dependencies] +test = [ + "coverage", + "pytest", + "pytest-asyncio", + "pytest-cov", + "pytest-jupyter[server]>=0.6.0" +] + [tool.hatch.version] source = "nodejs" @@ -39,7 +49,6 @@ exclude = [".github", "binder"] "jupyterlab_git/labextension" = "share/jupyter/labextensions/@jupyterlab/git" "install.json" = "share/jupyter/labextensions/@jupyterlab/git/install.json" "jupyter-config/server-config" = "etc/jupyter/jupyter_server_config.d" -"jupyter-config/nb-config" = "etc/jupyter/jupyter_notebook_config.d" [tool.hatch.build.hooks.version] path = "jupyterlab_git/_version.py" @@ -68,7 +77,7 @@ version_cmd = "hatch version" [tool.jupyter-releaser.hooks] before-build-npm = [ - "python -m pip install 'jupyterlab>=4.0.0b0,<5'", + "python -m pip install 'jupyterlab>=4.0.0,<5'", "jlpm", "jlpm build:prod" ] diff --git a/tsconfig.json b/tsconfig.json index c96a6811f..532390a14 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,11 +15,11 @@ "resolveJsonModule": true, "outDir": "lib", "rootDir": "src", - "skipLibCheck": true, +"skipLibCheck": true, "strict": true, - "strictNullChecks": false, + "strictNullChecks": true, "target": "ES2018", - "types": ["jest", "resize-observer-browser"] + "types": ["resize-observer-browser"] }, "include": ["src/**/*"], "exclude": ["src/__tests__"] diff --git a/tsconfig.test.json b/tsconfig.test.json index 20ca73ea5..423f96f51 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -1,5 +1,8 @@ { "extends": "./tsconfig", + "compilerOptions": { + "types": ["jest"] + }, "include": ["src/**/*"], "exclude": [] } diff --git a/ui-tests/README.md b/ui-tests/README.md index 2fdfb037d..a1c85ad92 100644 --- a/ui-tests/README.md +++ b/ui-tests/README.md @@ -12,6 +12,8 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. +> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). + ## Run the tests > All commands are assumed to be executed from the root directory @@ -127,7 +129,14 @@ jlpm playwright install cd .. ``` -3. Execute the [Playwright code generator](https://playwright.dev/docs/codegen): +3. Start the server: + +```sh +cd ./ui-tests +jlpm start +``` + +4. Execute the [Playwright code generator](https://playwright.dev/docs/codegen) in **another terminal**: ```sh cd ./ui-tests @@ -168,5 +177,15 @@ cd .. ```sh cd ./ui-tests -PWDEBUG=1 jlpm playwright test +jlpm playwright test --debug +``` + +## Upgrade Playwright and the browsers + +To update the web browser versions, you must update the package `@playwright/test`: + +```sh +cd ./ui-tests +jlpm up "@playwright/test" +jlpm playwright install ``` diff --git a/ui-tests/jupyter_server_test_config.py b/ui-tests/jupyter_server_test_config.py index c21ba2e60..c97b74055 100644 --- a/ui-tests/jupyter_server_test_config.py +++ b/ui-tests/jupyter_server_test_config.py @@ -5,7 +5,6 @@ JavaScript objects through the global window variable. """ import sys -from tempfile import mkdtemp try: import jupyter_archive @@ -13,15 +12,9 @@ print("You must install `jupyter-archive` for the integration tests.") sys.exit(1) -c.ServerApp.port = 8888 -c.ServerApp.port_retries = 0 -c.ServerApp.open_browser = False +from jupyterlab.galata import configure_jupyter_server -c.ServerApp.root_dir = mkdtemp(prefix="galata-test-") -c.ServerApp.token = "" -c.ServerApp.password = "" -c.ServerApp.disable_check_xsrf = True -c.LabApp.expose_app_in_browser = True +configure_jupyter_server(c) # Uncomment to set server log level to debug level # c.ServerApp.log_level = "DEBUG" diff --git a/ui-tests/package.json b/ui-tests/package.json index 3a3287b5a..cd1c67592 100644 --- a/ui-tests/package.json +++ b/ui-tests/package.json @@ -1,7 +1,7 @@ { "name": "@jupyterlab/git-ui-tests", "version": "1.0.0", - "description": "JupyterLab Git Integration Tests", + "description": "JupyterLab @jupyterlab/git Integration Tests", "private": true, "scripts": { "start": "jupyter lab --config jupyter_server_test_config.py", @@ -9,6 +9,7 @@ "test:update": "jlpm playwright test --update-snapshots" }, "devDependencies": { - "@jupyterlab/galata": "^5.0.6" + "@jupyterlab/galata": "^5.0.6", + "@playwright/test": "^1.37.0" } } From 02e7a60a9348fd150d93ba64882950fef5894011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Tue, 19 Sep 2023 15:05:14 +0200 Subject: [PATCH 05/24] Fix typing except for the diff widgets --- package.json | 2 +- src/cloneCommand.ts | 2 +- src/commandsAndMenu.tsx | 121 +- src/components/BranchMenu.tsx | 39 +- src/components/BranchPicker.tsx | 6 +- src/components/CommitBox.tsx | 2 +- src/components/CommitComparisonBox.tsx | 17 +- src/components/CommitDiff.tsx | 2 +- src/components/FileItem.tsx | 16 +- src/components/FileList.tsx | 62 +- src/components/GitCommitGraph.tsx | 6 +- src/components/GitPanel.tsx | 47 +- src/components/HistorySideBar.tsx | 16 +- src/components/ManageRemoteDialogue.tsx | 20 +- src/components/NewBranchDialog.tsx | 16 +- src/components/PastCommitNode.tsx | 16 +- src/components/RebaseAction.tsx | 35 +- src/components/SinglePastCommitInfo.tsx | 22 +- src/components/StatusWidget.tsx | 2 +- src/components/TagMenu.tsx | 26 +- src/components/diff/ImageDiff.tsx | 56 +- src/components/diff/NotebookDiff.ts | 8 +- src/components/diff/PlainTextDiff.ts | 9 +- src/components/diff/PreviewMainAreaWidget.ts | 10 +- src/components/diff/mergeview.ts | 1959 ------------------ src/components/diff/model.ts | 2 +- src/git.ts | 2 +- src/index.ts | 6 +- src/model.ts | 184 +- src/style/ActionButtonStyle.ts | 2 +- src/style/FileItemStyle.ts | 4 +- src/style/GitStageStyle.ts | 4 +- src/style/GitStashStyle.ts | 2 +- src/taskhandler.ts | 4 +- src/tokens.ts | 11 +- src/utils.ts | 14 +- src/widgets/AdvancedPushForm.tsx | 4 +- src/widgets/AuthorBox.ts | 5 +- src/widgets/CredentialsBox.tsx | 3 + src/widgets/GitResetToRemoteForm.tsx | 1 + src/widgets/gitClone.tsx | 4 +- 41 files changed, 454 insertions(+), 2315 deletions(-) delete mode 100644 src/components/diff/mergeview.ts diff --git a/package.json b/package.json index 73ac5dac9..9a1008315 100644 --- a/package.json +++ b/package.json @@ -285,4 +285,4 @@ "value-no-vendor-prefix": null } } -} \ No newline at end of file +} diff --git a/src/cloneCommand.ts b/src/cloneCommand.ts index 491ae1c24..3f2c31370 100644 --- a/src/cloneCommand.ts +++ b/src/cloneCommand.ts @@ -48,7 +48,7 @@ export const gitCloneCommandPlugin: JupyterFrontEndPlugin = { ] }); - if (result.button.accept && result.value.url) { + if (result.button.accept && result.value?.url) { logger.log({ level: Level.RUNNING, message: trans.__('Cloning…') diff --git a/src/commandsAndMenu.tsx b/src/commandsAndMenu.tsx index 077b8f8a7..1738222f9 100644 --- a/src/commandsAndMenu.tsx +++ b/src/commandsAndMenu.tsx @@ -340,7 +340,7 @@ export function addCommands( Dialog.okButton({ label: trans.__('Proceed') }) ] }); - if (result.button.accept) { + if (result.button.accept && result.value) { remote = result.value.remoteName; force = result.value.force; } else { @@ -490,7 +490,7 @@ export function addCommands( }); if (result.button.accept) { try { - if (result.value.checked) { + if (result.value?.checked) { logger.log({ message: trans.__('Closing all opened files...'), level: Level.RUNNING @@ -501,7 +501,7 @@ export function addCommands( message: trans.__('Resetting...'), level: Level.RUNNING }); - await gitModel.resetToCommit(gitModel.status.remote); + await gitModel.resetToCommit(gitModel.status.remote ?? undefined); logger.log({ message: trans.__('Successfully reset'), level: Level.SUCCESS, @@ -592,7 +592,9 @@ export function addCommands( }); // Pin the preview screen if applicable - PreviewMainAreaWidget.pinWidget(tabPosition, tabBar, diffWidget); + if (tabBar) { + PreviewMainAreaWidget.pinWidget(tabPosition, tabBar, diffWidget); + } // Create the diff widget try { @@ -736,7 +738,7 @@ export function addCommands( const dialog = ReactWidget.create( { dialog.dispose(); @@ -748,7 +750,7 @@ export function addCommands( Widget.attach(dialog, anchor); - branch = await waitForDialog.promise; + branch = (await waitForDialog.promise) ?? undefined; } if (branch) { @@ -764,7 +766,7 @@ export function addCommands( message: trans.__( "Failed to merge branch '%1' into '%2'.", branch, - gitModel.currentBranch.name + gitModel.currentBranch?.name ), error: err as Error }); @@ -776,7 +778,7 @@ export function addCommands( message: trans.__( "Branch '%1' merged into '%2'.", branch, - gitModel.currentBranch.name + gitModel.currentBranch?.name ) }); } @@ -811,7 +813,7 @@ export function addCommands( const dialog = ReactWidget.create( { dialog.dispose(); @@ -823,7 +825,7 @@ export function addCommands( Widget.attach(dialog, anchor); - branch = await waitForDialog.promise; + branch = (await waitForDialog.promise) ?? undefined; } if (branch) { @@ -838,7 +840,7 @@ export function addCommands( level: Level.ERROR, message: trans.__( "Failed to rebase branch '%1' onto '%2'.", - gitModel.currentBranch.name, + gitModel.currentBranch?.name, branch ), error: err as Error @@ -850,7 +852,7 @@ export function addCommands( level: Level.SUCCESS, message: trans.__( "Branch '%1' rebase onto '%2'.", - gitModel.currentBranch.name, + gitModel.currentBranch?.name, branch ) }); @@ -892,17 +894,18 @@ export function addCommands( execute: async (args: { action?: string } = {}) => { const { action } = args; - if (['continue', 'abort', 'skip'].includes(action)) { - const message = (action => { - switch (action) { - case 'continue': - return trans.__('Continue the rebase…'); - case 'skip': - return trans.__('Skip current commit…'); - case 'abort': - return trans.__('Abort the rebase…'); - } - })(action); + if (['continue', 'abort', 'skip'].includes(action ?? '')) { + const message = + (action => { + switch (action) { + case 'continue': + return trans.__('Continue the rebase…'); + case 'skip': + return trans.__('Skip current commit…'); + case 'abort': + return trans.__('Abort the rebase…'); + } + })(action) ?? ''; logger.log({ level: Level.RUNNING, @@ -911,16 +914,17 @@ export function addCommands( try { await gitModel.resolveRebase(action as any); } catch (err) { - const message = (action => { - switch (action) { - case 'continue': - return trans.__('Fail to continue rebasing.'); - case 'skip': - return trans.__('Fail to skip current commit when rebasing.'); - case 'abort': - return trans.__('Fail to abort the rebase.'); - } - })(action); + const message = + (action => { + switch (action) { + case 'continue': + return trans.__('Fail to continue rebasing.'); + case 'skip': + return trans.__('Fail to skip current commit when rebasing.'); + case 'abort': + return trans.__('Fail to abort the rebase.'); + } + })(action) ?? ''; logger.log({ level: Level.ERROR, message, @@ -929,16 +933,17 @@ export function addCommands( return; } - const message_ = (action => { - switch (action) { - case 'continue': - return trans.__('Commit submitted continuing rebase.'); - case 'skip': - return trans.__('Current commit skipped.'); - case 'abort': - return trans.__('Rebase aborted.'); - } - })(action); + const message_ = + (action => { + switch (action) { + case 'continue': + return trans.__('Commit submitted continuing rebase.'); + case 'skip': + return trans.__('Current commit skipped.'); + case 'abort': + return trans.__('Rebase aborted.'); + } + })(action) ?? ''; logger.log({ level: Level.SUCCESS, message: message_ @@ -1049,7 +1054,7 @@ export function addCommands( execute: async _ => { const domNode = app.contextMenuHitTest((node: HTMLElement) => { const nodeId = node.dataset.id; - return nodeId && nodeId.substring(0, 8) === 'git-diff'; + return nodeId?.substring(0, 8) === 'git-diff' ?? false; }); if (!domNode) { return; @@ -1100,6 +1105,10 @@ export function addCommands( ), execute: async args => { const { files } = args as any as CommandArguments.IGitFileDiff; + if (!gitModel.pathRepository) { + return; + } + for (const file of files) { const { context, @@ -1153,6 +1162,7 @@ export function addCommands( 'POST', { filename, + // @ts-expect-error this is serializable reference: challengerRef } ).then(data => data.content); @@ -1253,10 +1263,10 @@ export function addCommands( change: Contents.IChangedArgs ) => { const updateAt = new Date( - change.newValue.last_modified + change.newValue?.last_modified ?? 0 ).valueOf(); if ( - change.newValue.path === fullPath && + change.newValue?.path === fullPath && model.challenger.updateAt !== updateAt ) { model.challenger = { @@ -1741,7 +1751,7 @@ export function addFileBrowserContextMenu( contextMenu: ContextMenuSvg, trans: TranslationBundle ): void { - let gitMenu: Menu; + let gitMenu: Menu | null = null; let _commands: ContextCommandIDs[]; let _paths: string[]; @@ -1751,6 +1761,7 @@ export function addFileBrowserContextMenu( const items = Array.from(filebrowser.selectedItems()); const statuses = new Set( + // @ts-expect-error file cannot be undefined or null items .map(item => model.pathRepository === null @@ -1764,7 +1775,8 @@ export function addFileBrowserContextMenu( const allCommands = new Set( // flatten the list of lists of commands [] - .concat(...[...statuses].map(status => CONTEXT_COMMANDS[status])) + // @ts-expect-error status can index the context commands object + .concat(...[...statuses].map(status => CONTEXT_COMMANDS[status!])) // filter out the Open and Delete commands as // those are not needed in file browser .filter( @@ -1797,16 +1809,17 @@ export function addFileBrowserContextMenu( addMenuItems( commandsList, menu, - paths + // @ts-expect-error file cannot be undefined or null + (paths ?? []) .map(path => model.getFile(path)) // if file cannot be resolved (has no action available), // omit the undefined result - .filter(file => typeof file !== 'undefined') + .filter(file => !['null', 'undefined'].includes(typeof file)) ); if (wasShown) { // show the menu again after downtime for refresh - parent.triggerActiveItem(); + parent!.triggerActiveItem(); } _commands = commandsList; _paths = paths; @@ -1836,7 +1849,7 @@ export function addFileBrowserContextMenu( .then(() => { if (model.status !== renderedStatus) { // update items if needed - updateItems(gitMenu); + updateItems(gitMenu!); } }) .catch(error => { @@ -1988,7 +2001,7 @@ export async function showGitOperationDialog( case Operation.ForcePush: case Operation.Pull: // If the remote is defined, check it against the remote URI list - if (model.currentBranch.upstream) { + if (model.currentBranch?.upstream) { // Compare the remote against the URI list const remoteName = model.currentBranch.upstream.split('/')[0]; const currentRemoteUrl = await getCurrentRemote(remoteName); @@ -2034,7 +2047,7 @@ export async function showGitOperationDialog( operation, trans, args, - credentials.value, + credentials.value ?? undefined, true ); } else { diff --git a/src/components/BranchMenu.tsx b/src/components/BranchMenu.tsx index e45c098a5..9fa19b8af 100644 --- a/src/components/BranchMenu.tsx +++ b/src/components/BranchMenu.tsx @@ -291,8 +291,10 @@ export class BranchMenu extends React.Component< className={hiddenButtonStyle} icon={trashIcon} title={this.props.trans.__('Delete this branch locally')} - onClick={async (event: React.MouseEvent) => { - event.stopPropagation(); + onClick={async ( + event?: React.MouseEvent + ) => { + event?.stopPropagation(); await this._onDeleteBranch(branch.name); }} /> @@ -302,8 +304,10 @@ export class BranchMenu extends React.Component< title={this.props.trans.__( 'Merge this branch into the current one' )} - onClick={(event: React.MouseEvent) => { - event.stopPropagation(); + onClick={( + event?: React.MouseEvent + ) => { + event?.stopPropagation(); this._onMergeBranch(branch.name); }} /> @@ -428,9 +432,6 @@ export class BranchMenu extends React.Component< * @returns callback */ private _onBranchClickFactory(branch: string) { - const self = this; - return onClick; - /** * Callback invoked upon clicking a branch name. * @@ -438,11 +439,11 @@ export class BranchMenu extends React.Component< * @param event - event object * @returns promise which resolves upon attempting to switch branches */ - async function onClick(): Promise { - if (!self.props.branching) { + const onClick = async (): Promise => { + if (!this.props.branching) { showErrorMessage( - self.props.trans.__('Switching branches is disabled'), - self.CHANGES_ERR_MSG + this.props.trans.__('Switching branches is disabled'), + this.CHANGES_ERR_MSG ); return; } @@ -450,21 +451,23 @@ export class BranchMenu extends React.Component< branchname: branch }; - self.props.logger.log({ + this.props.logger.log({ level: Level.RUNNING, - message: self.props.trans.__('Switching branch…') + message: this.props.trans.__('Switching branch…') }); try { - await self.props.model.checkout(opts); + await this.props.model.checkout(opts); } catch (err) { - return onBranchError(err, self.props.logger, self.props.trans); + return onBranchError(err, this.props.logger, this.props.trans); } - self.props.logger.log({ + this.props.logger.log({ level: Level.SUCCESS, - message: self.props.trans.__('Switched branch.') + message: this.props.trans.__('Switched branch.') }); - } + }; + + return onClick; } } diff --git a/src/components/BranchPicker.tsx b/src/components/BranchPicker.tsx index 71f3f74e4..a8480584d 100644 --- a/src/components/BranchPicker.tsx +++ b/src/components/BranchPicker.tsx @@ -118,7 +118,9 @@ export function BranchPicker(props: IBranchPickerProps): JSX.Element { paper: branchDialogClass }} open={true} - onClose={props.onClose} + onClose={() => { + props.onClose(); + }} >

@@ -208,7 +210,7 @@ export function BranchPicker(props: IBranchPickerProps): JSX.Element { } value={act === 'merge' ? trans.__('Merge') : trans.__('Rebase')} onClick={() => { - props.onClose(selectedBranch); + props.onClose(selectedBranch ?? undefined); }} disabled={selectedBranch === null} /> diff --git a/src/components/CommitBox.tsx b/src/components/CommitBox.tsx index 3f9e38921..5c65cf3cd 100644 --- a/src/components/CommitBox.tsx +++ b/src/components/CommitBox.tsx @@ -305,7 +305,7 @@ export class CommitBox extends React.Component< const binding = this.props.commands.keyBindings.find( binding => binding.command === CommandIDs.gitSubmitCommand ); - return binding.keys.join(' '); + return binding?.keys.join(' ') ?? ''; }; /** diff --git a/src/components/CommitComparisonBox.tsx b/src/components/CommitComparisonBox.tsx index fe03c2eeb..ce597312a 100644 --- a/src/components/CommitComparisonBox.tsx +++ b/src/components/CommitComparisonBox.tsx @@ -62,7 +62,7 @@ export interface ICommitComparisonBoxProps { /** * Returns a callback to be invoked on close. */ - onClose: (event: React.MouseEvent) => void; + onClose: (event?: React.MouseEvent) => void; /** * Returns a callback to be invoked on click to display a file diff. @@ -76,7 +76,7 @@ export interface ICommitComparisonBoxProps { filePath: string, isText: boolean, previousFilePath?: string - ) => (event: React.MouseEvent) => void; + ) => (event?: React.MouseEvent) => void; } /** @@ -106,7 +106,7 @@ export function CommitComparisonBox( return; } - let diffResult: Git.IDiffResult = null; + let diffResult: Git.IDiffResult | null = null; try { diffResult = await model.diff( referenceCommit.commit, @@ -127,7 +127,7 @@ export function CommitComparisonBox( } if (diffResult) { setFiles( - diffResult.result.map(changedFile => { + (diffResult.result ?? []).map(changedFile => { const pathParts = changedFile.filename.split('/'); const fileName = pathParts[pathParts.length - 1]; const filePath = changedFile.filename; @@ -162,7 +162,7 @@ export function CommitComparisonBox( ) => { + onClick={(event?: React.MouseEvent) => { props.onClose(event); }} > @@ -175,7 +175,12 @@ export function CommitComparisonBox( files={files} insertions={`${totalInsertions}`} numFiles={`${files.length}`} - onOpenDiff={props.onOpenDiff} + onOpenDiff={ + props.onOpenDiff ?? + (() => () => { + /* no-op */ + }) + } trans={props.trans} > ) : ( diff --git a/src/components/CommitDiff.tsx b/src/components/CommitDiff.tsx index 4adf6210c..48ec1ddf8 100644 --- a/src/components/CommitDiff.tsx +++ b/src/components/CommitDiff.tsx @@ -84,7 +84,7 @@ export interface ICommitDiffProps { filePath: string, isText: boolean, previousFilePath?: string - ) => (event: React.MouseEvent) => void; + ) => (event?: React.MouseEvent) => void; } /** diff --git a/src/components/FileItem.tsx b/src/components/FileItem.tsx index b7beb82f8..9bab17ab4 100644 --- a/src/components/FileItem.tsx +++ b/src/components/FileItem.tsx @@ -90,7 +90,7 @@ export interface IFileItemProps { /** * Action buttons on the file */ - actions?: React.ReactElement; + actions?: React.ReactNode; /** * Callback to open a context menu on the file */ @@ -152,18 +152,18 @@ export class FileItem extends React.PureComponent { protected _onClick = (event: React.MouseEvent): void => { if (this.props.markBox) { if (event.shiftKey) { - this.props.markUntilFile(this.props.file); + this.props.markUntilFile!(this.props.file); } else { this.props.model.toggleMark(this.props.file.to); - this.props.setSelection(this.props.file, { singleton: true }); + this.props.setSelection!(this.props.file, { singleton: true }); } } else { if (event.ctrlKey || event.metaKey) { - this.props.setSelection(this.props.file); + this.props.setSelection!(this.props.file); } else if (event.shiftKey) { - this.props.setSelection(this.props.file, { group: true }); + this.props.setSelection!(this.props.file, { group: true }); } else { - this.props.setSelection(this.props.file, { singleton: true }); + this.props.setSelection!(this.props.file, { singleton: true }); } } }; @@ -227,7 +227,7 @@ export class FileItem extends React.PureComponent { onContextMenu={ this.props.contextMenu && (event => { - this.props.contextMenu(this.props.file, event); + this.props.contextMenu!(this.props.file, event); }) } onDoubleClick={this.props.onDoubleClick} @@ -241,7 +241,7 @@ export class FileItem extends React.PureComponent { fname={this.props.file.to} stage={this.props.file.status} model={this.props.model} - checked={this.props.checked} + checked={this.props.checked ?? false} /> )} ; +export type ContextCommands = Record< + NonNullable, + ContextCommandIDs[] +>; export const CONTEXT_COMMANDS: ContextCommands = { 'partially-staged': [ @@ -183,6 +186,7 @@ export class FileList extends React.Component { } const contextMenu = new Menu({ commands: this.props.commands }); + // @ts-expect-error unproper index const commands = CONTEXT_COMMANDS[selectedFiles[0].status]; addMenuItems(commands, contextMenu, selectedFiles); @@ -202,14 +206,17 @@ export class FileList extends React.Component { event.preventDefault(); const contextMenu = new Menu({ commands: this.props.commands }); + // @ts-expect-error unproper index const commands = SIMPLE_CONTEXT_COMMANDS[selectedFile.status]; addMenuItems(commands, contextMenu, [selectedFile]); contextMenu.open(event.clientX, event.clientY); }; /** Reset all staged files */ - resetAllStagedFiles = async (event: React.MouseEvent): Promise => { - event.stopPropagation(); + resetAllStagedFiles = async ( + event?: React.MouseEvent + ): Promise => { + event?.stopPropagation(); await this.props.model.reset(); }; @@ -238,15 +245,19 @@ export class FileList extends React.Component { }; /** Add all unstaged files */ - addAllUnstagedFiles = async (event: React.MouseEvent): Promise => { - event.stopPropagation(); + addAllUnstagedFiles = async ( + event?: React.MouseEvent + ): Promise => { + event?.stopPropagation(); await this.props.model.addAllUnstaged(); }; /** Discard changes in all unstaged files */ - discardAllUnstagedFiles = async (event: React.MouseEvent): Promise => { - event.stopPropagation(); + discardAllUnstagedFiles = async ( + event?: React.MouseEvent + ): Promise => { + event?.stopPropagation(); const result = await showDialog({ title: this.props.trans.__('Discard all changes'), @@ -271,8 +282,10 @@ export class FileList extends React.Component { }; /** Discard changes in all unstaged and staged files */ - discardAllChanges = async (event: React.MouseEvent): Promise => { - event.stopPropagation(); + discardAllChanges = async ( + event?: React.MouseEvent + ): Promise => { + event?.stopPropagation(); await discardAllChanges(this.props.model, this.props.trans); }; @@ -295,8 +308,10 @@ export class FileList extends React.Component { }; /** Add all untracked files */ - addAllUntrackedFiles = async (event: React.MouseEvent): Promise => { - event.stopPropagation(); + addAllUntrackedFiles = async ( + event?: React.MouseEvent + ): Promise => { + event?.stopPropagation(); await this.props.model.addAllUntracked(); }; @@ -335,11 +350,14 @@ export class FileList extends React.Component { return; } const filesWithMarkBox = this.props.files.filter( - fileStatus => !['unmerged', 'remote-changed'].includes(fileStatus.status) + fileStatus => !['unmerged', 'remote-changed'].includes(fileStatus.status!) ); const lastClickedFileIndex = filesWithMarkBox.findIndex(fileStatus => - areFilesEqual(fileStatus, this.state.lastClickedFile) + areFilesEqual( + fileStatus, + this.state.lastClickedFile ?? ({} as Git.IStatusFile) + ) ); const currentFileIndex = filesWithMarkBox.findIndex(fileStatus => areFilesEqual(fileStatus, file) @@ -382,7 +400,7 @@ export class FileList extends React.Component { * @param file The clicked file */ private _toggleFile = (file: Git.IStatusFile): void => { - if (file.status !== this.state.lastClickedFile.status) { + if (file.status !== this.state.lastClickedFile?.status) { this._selectOnlyOneFile(file); return; } @@ -486,7 +504,11 @@ export class FileList extends React.Component { allFilesWithSelectedStatus.sort((a, b) => a.to.localeCompare(b.to)); const lastClickedFileIndex = allFilesWithSelectedStatus.findIndex( - fileStatus => areFilesEqual(fileStatus, this.state.lastClickedFile) + fileStatus => + areFilesEqual( + fileStatus, + this.state.lastClickedFile ?? ({} as Git.IStatusFile) + ) ); const currentFileIndex = allFilesWithSelectedStatus.findIndex(fileStatus => areFilesEqual(fileStatus, file) @@ -548,7 +570,9 @@ export class FileList extends React.Component { } }; - pullFromRemote = async (event: React.MouseEvent): Promise => { + pullFromRemote = async ( + event?: React.MouseEvent + ): Promise => { await this.props.commands.execute(CommandIDs.gitPull, {}); }; @@ -678,7 +702,7 @@ export class FileList extends React.Component { return ( { * @param path File path of interest * @param currentRef the ref to diff against the git 'HEAD' ref */ - private _createDiffButton(file: Git.IStatusFile): JSX.Element { + private _createDiffButton(file: Git.IStatusFile): React.ReactNode { let handleClick: () => void; if (this.props.settings.composite['simpleStaging']) { handleClick = () => this._openDiffViews([file]); @@ -1278,7 +1302,7 @@ export class FileList extends React.Component { */ private _areFilesAllMarked(): boolean { const filesForSimpleStaging = this.props.files.filter( - file => !['unmerged', 'remote-changed'].includes(file.status) + file => !['unmerged', 'remote-changed'].includes(file.status!) ); return ( filesForSimpleStaging.length !== 0 && diff --git a/src/components/GitCommitGraph.tsx b/src/components/GitCommitGraph.tsx index 1560e61d7..bbec73182 100644 --- a/src/components/GitCommitGraph.tsx +++ b/src/components/GitCommitGraph.tsx @@ -208,16 +208,16 @@ export class GitCommitGraph extends React.Component { render(): JSX.Element { // reset lookup table of commit node locations const allCommitNodes: JSX.Element[] = []; - let allRouteNodes: JSX.Element[] = []; + const allRouteNodes: JSX.Element[] = []; const commitNodes = this.getGraphData(); commitNodes.forEach(node => { const commit = node; const [commitNode, routeNodes] = this.renderCommit(commit); allCommitNodes.push(commitNode); - allRouteNodes = allRouteNodes.concat(routeNodes); + allRouteNodes.push(...routeNodes); }); - const children = [].concat(allRouteNodes, allCommitNodes); + const children = [...allRouteNodes, ...allCommitNodes]; const height = this.getHeight(); const width = this.getWidth(); diff --git a/src/components/GitPanel.tsx b/src/components/GitPanel.tsx index 0b2ce23c5..87da4cf31 100644 --- a/src/components/GitPanel.tsx +++ b/src/components/GitPanel.tsx @@ -29,7 +29,7 @@ import { FileList } from './FileList'; import { HistorySideBar } from './HistorySideBar'; import { Toolbar } from './Toolbar'; import { WarningBox } from './WarningBox'; -import { WarningRounded as WarningRoundedIcon } from '@material-ui/icons'; +import { WarningRounded as WarningRoundedIcon } from '@mui/icons-material'; import { GitStash } from './GitStash'; import { ActionButton } from './ActionButton'; import { addIcon, rewindIcon, trashIcon } from '../style/icons'; @@ -248,8 +248,8 @@ export class GitPanel extends React.Component { this.setState({ tab: 1 }); this.refreshHistory(); }, this); - model.notifyRemoteChanges.connect((_, args) => { - this.warningDialog(args); + model.remoteChanged.connect((_, args) => { + this.warningDialog(args!); }, this); settings.changed.connect(this.refreshView, this); @@ -296,7 +296,7 @@ export class GitPanel extends React.Component { ); let pastCommits = new Array(); if (logData.code === 0) { - pastCommits = logData.commits; + pastCommits = logData.commits ?? []; } this.setState({ @@ -566,13 +566,13 @@ export class GitPanel extends React.Component { setAmend={this._setCommitAmend} onCommit={this.commitFiles} warning={ - this.state.hasDirtyFiles && ( + this.state.hasDirtyFiles ? ( } title={warningTitle} content={warningContent} /> - ) + ) : null } /> ) : ( @@ -606,7 +606,7 @@ export class GitPanel extends React.Component { referenceCommit={this.state.referenceCommit} challengerCommit={this.state.challengerCommit} onSelectForCompare={commit => async event => { - event.stopPropagation(); + event?.stopPropagation(); this.setState({ referenceCommit: commit }, () => { this._openSingleFileComparison( event as React.MouseEvent @@ -614,7 +614,7 @@ export class GitPanel extends React.Component { }); }} onCompareWithSelected={commit => async event => { - event.stopPropagation(); + event?.stopPropagation(); this.setState({ challengerCommit: commit }, () => { this._openSingleFileComparison( event as React.MouseEvent @@ -641,7 +641,7 @@ export class GitPanel extends React.Component { logger={this.props.logger} trans={this.props.trans} onClose={event => { - event.stopPropagation(); + event?.stopPropagation(); this.setState({ referenceCommit: null, challengerCommit: null @@ -766,7 +766,9 @@ export class GitPanel extends React.Component { * @param message - commit message * @returns a promise which commits the files */ - private _commitMarkedFiles = async (message: string): Promise => { + private _commitMarkedFiles = async ( + message: string | null + ): Promise => { this.props.logger.log({ level: Level.RUNNING, message: this.props.trans.__('Staging files...') @@ -783,7 +785,9 @@ export class GitPanel extends React.Component { * @param message - commit message * @returns a promise which commits the files */ - private _commitStagedFiles = async (message?: string): Promise => { + private _commitStagedFiles = async ( + message: string | null = null + ): Promise => { const errorLog: ILogMessage = { level: Level.ERROR, message: this.props.trans.__('Failed to commit changes.') @@ -827,7 +831,11 @@ export class GitPanel extends React.Component { * * @param path - repository path */ - private async _hasIdentity(path: string): Promise { + private async _hasIdentity(path: string | null): Promise { + if (!path) { + return null; + } + // If the repository path changes or explicitly configured, check the user identity if ( path !== this._previousRepoPath || @@ -835,7 +843,7 @@ export class GitPanel extends React.Component { ) { try { let userOrEmailNotSet = false; - let author: Git.IIdentity; + let author: Git.IIdentity | null; let authorOverride: string | null = null; if (this.props.model.lastAuthor === null) { @@ -870,14 +878,14 @@ export class GitPanel extends React.Component { author = result.value; if (userOrEmailNotSet) { await this.props.model.config({ - 'user.name': author.name, - 'user.email': author.email + 'user.name': author!.name, + 'user.email': author!.email }); } - this.props.model.lastAuthor = author; + this.props.model.lastAuthor = author!; if (this.props.settings.composite['promptUserIdentity']) { - authorOverride = `${author.name} <${author.email}>`; + authorOverride = `${author!.name} <${author!.email}>`; } } this._previousRepoPath = path; @@ -888,10 +896,13 @@ export class GitPanel extends React.Component { } throw new Error( + // @ts-expect-error error will have message attribute this.props.trans.__('Failed to set your identity. %1', error.message) ); } } + + return null; } private _hasStagedFile(): boolean { @@ -926,7 +937,7 @@ export class GitPanel extends React.Component { return sfiles; } - private _previousRepoPath: string = null; + private _previousRepoPath: string | null = null; /** * Show a dialog when a notifyRemoteChanges signal is emitted from the model. diff --git a/src/components/HistorySideBar.tsx b/src/components/HistorySideBar.tsx index 5199b3fda..dcf25b737 100644 --- a/src/components/HistorySideBar.tsx +++ b/src/components/HistorySideBar.tsx @@ -70,7 +70,7 @@ export interface IHistorySideBarProps { */ onSelectForCompare?: ( commit: Git.ISingleCommitInfo - ) => (event: React.MouseEvent) => Promise; + ) => (event?: React.MouseEvent) => Promise; /** * Callback invoked upon clicking to compare a commit against the selected. @@ -78,7 +78,7 @@ export interface IHistorySideBarProps { */ onCompareWithSelected?: ( commit: Git.ISingleCommitInfo - ) => (event: React.MouseEvent) => Promise; + ) => (event?: React.MouseEvent) => Promise; } export const CONTEXT_COMMANDS = [ContextCommandIDs.gitTagAdd]; @@ -127,7 +127,7 @@ export const HistorySideBar: React.FunctionComponent = ( const [nodeHeights, setNodeHeights] = React.useState<{ [sha: string]: number; }>({}); - const nodes = React.useRef<{ [sha: string]: HTMLLIElement }>({}); + const nodes = React.useRef<{ [sha: string]: HTMLLIElement | null }>({}); React.useEffect(() => { const resizeObserver = new ResizeObserver(entries => { @@ -142,7 +142,7 @@ export const HistorySideBar: React.FunctionComponent = ( }); props.commits.forEach(commit => - resizeObserver.observe(nodes.current[commit.commit], { + resizeObserver.observe(nodes.current[commit.commit]!, { box: 'border-box' }) ); @@ -236,12 +236,14 @@ export const HistorySideBar: React.FunctionComponent = ( isChallengerCommit={isChallengerCommit} onOpenDiff={onOpenDiff} onSelectForCompare={ - isChallengerCommit ? null : props.onSelectForCompare(commit) + isChallengerCommit + ? undefined + : props.onSelectForCompare!(commit) } onCompareWithSelected={ isReferenceCommit || props.referenceCommit === null - ? null - : props.onCompareWithSelected(commit) + ? undefined + : props.onCompareWithSelected!(commit) } expanded={expandedCommits.includes(commit.commit)} toggleCommitExpansion={sha => diff --git a/src/components/ManageRemoteDialogue.tsx b/src/components/ManageRemoteDialogue.tsx index eded89320..88e4e96b1 100644 --- a/src/components/ManageRemoteDialogue.tsx +++ b/src/components/ManageRemoteDialogue.tsx @@ -136,7 +136,7 @@ export class ManageRemoteDialogue extends React.Component< } onKeyPress={e => { if (e.key === 'Enter') { - this._addRemoteButton.click(); + this._addRemoteButton?.click(); } }} /> @@ -161,11 +161,11 @@ export class ManageRemoteDialogue extends React.Component< const { name, url } = this.state.newRemote; try { await this.props.model.addRemote(url, name); - this._nameInput.value = ''; - this._urlInput.value = ''; + this._nameInput!.value = ''; + this._urlInput!.value = ''; this.setState(prevState => ({ existingRemotes: [ - ...prevState.existingRemotes, + ...(prevState.existingRemotes ?? []), prevState.newRemote ], newRemote: { name: '', url: '' } @@ -199,9 +199,9 @@ export class ManageRemoteDialogue extends React.Component< onClick={async () => { await this.props.model.removeRemote(remote.name); this.setState({ - existingRemotes: this.state.existingRemotes.filter( - r => r.name !== remote.name - ) + existingRemotes: ( + this.state.existingRemotes ?? [] + ).filter(r => r.name !== remote.name) }); }} /> @@ -217,7 +217,7 @@ export class ManageRemoteDialogue extends React.Component< ); } - private _nameInput: HTMLInputElement; - private _urlInput: HTMLInputElement; - private _addRemoteButton: HTMLInputElement; + private _nameInput: HTMLInputElement | null = null; + private _urlInput: HTMLInputElement | null = null; + private _addRemoteButton: HTMLInputElement | null = null; } diff --git a/src/components/NewBranchDialog.tsx b/src/components/NewBranchDialog.tsx index 7680b3537..aa56965f3 100644 --- a/src/components/NewBranchDialog.tsx +++ b/src/components/NewBranchDialog.tsx @@ -358,7 +358,7 @@ export class NewBranchDialog extends React.Component< * @param event - event object */ private _onFilterChange = (event: any): void => { - this._branchList.current.resetAfterIndex(0); + this._branchList.current?.resetAfterIndex(0); this.setState({ filter: event.target.value }); @@ -368,7 +368,7 @@ export class NewBranchDialog extends React.Component< * Callback invoked to reset the menu filter. */ private _resetFilter = (): void => { - this._branchList.current.resetAfterIndex(0); + this._branchList.current?.resetAfterIndex(0); this.setState({ filter: '' }); @@ -381,20 +381,18 @@ export class NewBranchDialog extends React.Component< * @returns callback */ private _onBranchClickFactory(branch: string) { - const self = this; - return onClick; - /** * Callback invoked upon clicking a branch name. * * @private * @param event - event object */ - function onClick(): void { - self.setState({ + const onClick = (): void => { + this.setState({ base: branch }); - } + }; + return onClick; } /** @@ -447,7 +445,7 @@ export class NewBranchDialog extends React.Component< this.props.onClose(); // Reset the branch name and filter: - this._branchList.current.resetAfterIndex(0); + this._branchList.current?.resetAfterIndex(0); this.setState({ name: '', filter: '' diff --git a/src/components/PastCommitNode.tsx b/src/components/PastCommitNode.tsx index 60c3977ac..31311051a 100644 --- a/src/components/PastCommitNode.tsx +++ b/src/components/PastCommitNode.tsx @@ -88,9 +88,9 @@ export interface IPastCommitNodeProps { * * @param event - event object */ - onSelectForCompare: - | ((event: React.MouseEvent) => Promise) - | null; + onSelectForCompare?: ( + event?: React.MouseEvent + ) => Promise; /** * Callback invoked upon clicking to compare a commit against the selected. @@ -99,9 +99,9 @@ export interface IPastCommitNodeProps { * * @param event - event object */ - onCompareWithSelected: - | ((event: React.MouseEvent) => Promise) - | null; + onCompareWithSelected?: ( + event?: React.MouseEvent + ) => Promise; /** * Whether the PastCommitNode is expanded */ @@ -117,7 +117,7 @@ export interface IPastCommitNodeProps { * * @param el the

  • element representing a past commit */ - setRef: (el: HTMLLIElement) => void; + setRef: (el: HTMLLIElement | null) => void; /** * Callback to open a context menu on the commit @@ -173,7 +173,7 @@ export class PastCommitNode extends React.Component< onContextMenu={ this.props.contextMenu && (event => { - this.props.contextMenu(this.props.commit, event); + this.props.contextMenu!(this.props.commit, event); }) } > diff --git a/src/components/RebaseAction.tsx b/src/components/RebaseAction.tsx index 78ae533a6..6ec32ea49 100644 --- a/src/components/RebaseAction.tsx +++ b/src/components/RebaseAction.tsx @@ -1,16 +1,14 @@ import { Dialog, showDialog } from '@jupyterlab/apputils'; import { TranslationBundle } from '@jupyterlab/translation'; import { CommandRegistry } from '@lumino/commands'; -import { - Button, - ButtonGroup, - ClickAwayListener, - Grow, - MenuItem, - MenuList, - Paper, - Popper -} from '@material-ui/core'; +import Button from '@mui/material/Button'; +import ButtonGroup from '@mui/material/ButtonGroup'; +import { ClickAwayListener } from '@mui/base'; +import Grow from '@mui/material/Grow'; +import MenuItem from '@mui/material/MenuItem'; +import MenuList from '@mui/material/MenuList'; +import Paper from '@mui/material/Paper'; +import Popper from '@mui/material/Popper'; import React from 'react'; import { commitButtonClass, @@ -48,19 +46,16 @@ export interface IRebaseActionProps { */ export function RebaseAction(props: IRebaseActionProps): JSX.Element { const [open, setOpen] = React.useState(false); - const anchor = React.useRef(); + const anchor = React.useRef(null); const onToggle = React.useCallback(() => { setOpen(!open); }, []); - const onClose = React.useCallback( - (event: React.MouseEvent) => { - if (anchor.current.contains(event.target as HTMLElement)) { - return; - } - setOpen(false); - }, - [] - ); + const onClose = React.useCallback((event: MouseEvent | TouchEvent) => { + if (anchor.current?.contains(event.target as HTMLElement)) { + return; + } + setOpen(false); + }, []); const onContinue = React.useCallback(async () => { await props.commands.execute(CommandIDs.gitResolveRebase, { action: 'continue' diff --git a/src/components/SinglePastCommitInfo.tsx b/src/components/SinglePastCommitInfo.tsx index d3f0e69a6..7f5752ba2 100644 --- a/src/components/SinglePastCommitInfo.tsx +++ b/src/components/SinglePastCommitInfo.tsx @@ -49,7 +49,7 @@ export interface ISinglePastCommitInfoProps { filePath: string, isText: boolean, previousFilePath?: string - ) => (event: React.MouseEvent) => void; + ) => (event?: React.MouseEvent) => void; } /** @@ -137,15 +137,17 @@ export class SinglePastCommitInfo extends React.Component< try { const log = await this.props.model.detailedLog(this.props.commit.commit); - this.setState({ - info: log.modified_file_note, - commitBody: log.commit_body, - numFiles: log.modified_files_count, - insertions: log.number_of_insertions, - deletions: log.number_of_deletions, - modifiedFiles: log.modified_files, - loadingState: 'success' - }); + if (log) { + this.setState({ + info: log.modified_file_note!, + commitBody: log.commit_body!, + numFiles: log.modified_files_count!, + insertions: log.number_of_insertions!, + deletions: log.number_of_deletions!, + modifiedFiles: log.modified_files!, + loadingState: 'success' + }); + } } catch (err) { console.error( `Error while getting detailed log for commit ${this.props.commit.commit} and path ${this.props.model.pathRepository}`, diff --git a/src/components/StatusWidget.tsx b/src/components/StatusWidget.tsx index 80560ba6d..365ede749 100644 --- a/src/components/StatusWidget.tsx +++ b/src/components/StatusWidget.tsx @@ -258,7 +258,7 @@ namespace Private { * @returns boolean indicating whether the extension should display status updates */ function isActive(): boolean { - return settings.composite.displayStatus as boolean; + return (settings?.composite.displayStatus ?? true) as boolean; } } } diff --git a/src/components/TagMenu.tsx b/src/components/TagMenu.tsx index a107004d8..a98f0fa7f 100644 --- a/src/components/TagMenu.tsx +++ b/src/components/TagMenu.tsx @@ -333,9 +333,6 @@ export class TagMenu extends React.Component { * @returns callback */ private _onTagClickFactory(tag: string) { - const self = this; - return onClick; - /** * Callback invoked upon clicking a tag. * @@ -343,32 +340,33 @@ export class TagMenu extends React.Component { * @param event - event object * @returns promise which resolves upon attempting to switch tags */ - async function onClick(): Promise { - if (!self.props.branching) { + const onClick = async (): Promise => { + if (!this.props.branching) { showErrorMessage( - self.props.trans.__('Checkout tags is disabled'), - self.props.trans.__( + this.props.trans.__('Checkout tags is disabled'), + this.props.trans.__( 'The repository contains files with uncommitted changes. Please commit or discard these changes before switching to a tag.' ) ); return; } - self.props.logger.log({ + this.props.logger.log({ level: Level.RUNNING, - message: self.props.trans.__('Checking tag out…') + message: this.props.trans.__('Checking tag out…') }); try { - await self.props.model.checkoutTag(tag); + await this.props.model.checkoutTag(tag); } catch (err) { - return onTagError(err, self.props.logger, self.props.trans); + return onTagError(err, this.props.logger, this.props.trans); } - self.props.logger.log({ + this.props.logger.log({ level: Level.SUCCESS, - message: self.props.trans.__('Tag checkout.') + message: this.props.trans.__('Tag checkout.') }); - } + }; + return onClick; } } diff --git a/src/components/diff/ImageDiff.tsx b/src/components/diff/ImageDiff.tsx index 60cab47e9..df7067a67 100644 --- a/src/components/diff/ImageDiff.tsx +++ b/src/components/diff/ImageDiff.tsx @@ -11,9 +11,10 @@ import { useLayoutEffect, useEffect } from 'react'; -import { Slider as MUISlider, withStyles } from '@material-ui/core'; -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; +import Slider from '@mui/material/Slider'; +import { styled } from '@mui/material/styles'; +import Tabs from '@mui/material/Tabs'; +import Tab from '@mui/material/Tab'; import { Git } from '../../tokens'; import { @@ -58,7 +59,10 @@ export const createImageDiff: Git.Diff.ICallback = async ( toolbar?: Toolbar, translator?: ITranslator ): Promise => { - const widget = new ImageDiffWidget(model, translator.load('jupyterlab_git')); + const widget = new ImageDiffWidget( + model, + (translator ?? nullTranslator).load('jupyterlab_git') + ); await widget.ready; return widget; }; @@ -276,16 +280,14 @@ type SliderProps = { reversed?: boolean; }; -const CustomMUISlider = withStyles({ - root: { - color: 'var(--jp-brand-color1)' - }, - thumb: { +const CustomMUISlider = styled(Slider)({ + color: 'var(--jp-brand-color1)', + '& .MuiSlider-thumb': { backgroundColor: 'var(--jp-brand-color1)' } -})(MUISlider); +}); -const Slider = ({ value, onChange, width, reversed }: SliderProps) => { +const Slider_ = ({ value, onChange, width, reversed }: SliderProps) => { const circleClasses = reversed ? [sliderChallengerCircle, sliderReferenceCircle] : [sliderReferenceCircle, sliderChallengerCircle]; @@ -307,8 +309,8 @@ const Swipe = ({ reference, challenger, fileType }: ImageDiffViewProps) => { const [sliderValue, setSliderValue] = useState(50); const [sliderWidth, setSliderWidth] = useState(0); - const referenceImageRef = useRef(null); - const challengerImageRef = useRef(null); + const referenceImageRef = useRef(null); + const challengerImageRef = useRef(null); const handleSliderChange = ( event: React.ChangeEvent, @@ -320,15 +322,15 @@ const Swipe = ({ reference, challenger, fileType }: ImageDiffViewProps) => { }; useLayoutEffect(() => { - const refWidth = reference ? referenceImageRef.current.offsetWidth : 0; - const challWidth = challenger ? challengerImageRef.current.offsetWidth : 0; + const refWidth = reference ? referenceImageRef.current!.offsetWidth : 0; + const challWidth = challenger ? challengerImageRef.current!.offsetWidth : 0; setSliderWidth(Math.max(refWidth, challWidth) - 10); }, []); return (
    - { />
    { width: sliderWidth ? `${sliderWidth}px` : '' }} alt="Reference" - ref={referenceImageRef} /> { width: sliderWidth ? `${sliderWidth}px` : '' }} alt="Challenger" - ref={challengerImageRef} />
    @@ -372,8 +374,8 @@ const OnionSkin = ({ reference, challenger, fileType }: ImageDiffViewProps) => { const [sliderValue, setSliderValue] = useState(50); const [sliderWidth, setSliderWidth] = useState(40); - const referenceImageRef = useRef(null); - const challengerImageRef = useRef(null); + const referenceImageRef = useRef(null); + const challengerImageRef = useRef(null); const handleSliderChange = ( event: React.ChangeEvent, @@ -385,15 +387,17 @@ const OnionSkin = ({ reference, challenger, fileType }: ImageDiffViewProps) => { }; useLayoutEffect(() => { - const refWidth = reference ? referenceImageRef.current.offsetWidth : 40; - const challWidth = challenger ? challengerImageRef.current.offsetWidth : 40; + const refWidth = reference ? referenceImageRef.current!.offsetWidth : 40; + const challWidth = challenger + ? challengerImageRef.current!.offsetWidth + : 40; setSliderWidth(Math.max(refWidth, challWidth) - 10); }, []); return (
    - > { - return null; + // TODO + return {}; } async refresh(): Promise { diff --git a/src/components/diff/NotebookDiff.ts b/src/components/diff/NotebookDiff.ts index d77447ede..71e0d5ac4 100644 --- a/src/components/diff/NotebookDiff.ts +++ b/src/components/diff/NotebookDiff.ts @@ -86,7 +86,7 @@ export const createNotebookDiff = async ( translator?: ITranslator ): Promise => { // Create the notebook diff view - const trans = translator.load('jupyterlab_git'); + const trans = (translator ?? nullTranslator).load('jupyterlab_git'); const diffWidget = new NotebookDiff(model, renderMime, trans); diffWidget.addClass('jp-git-diff-root'); @@ -175,7 +175,7 @@ export class NotebookDiff extends Panel implements Git.Diff.IDiffWidget { * Helper to determine if a notebook merge should be shown. */ private get _hasConflict(): boolean { - return this._model.hasConflict; + return this._model.hasConflict ?? false; } /** @@ -268,7 +268,7 @@ export class NotebookDiff extends Panel implements Git.Diff.IDiffWidget { this._nbdWidget = await createView( challengerContent, referenceContent, - baseContent + baseContent ?? '' ); while (this._scroller.widgets.length > 0) { @@ -363,8 +363,10 @@ export class NotebookDiff extends Panel implements Git.Diff.IDiffWidget { protected _isReady: Promise; protected _lastSerializeModel: INotebookContent | null = null; protected _model: Git.Diff.IModel; + // @ts-expect-error Complex initialization protected _nbdWidget: NotebookMergeWidget | NotebookDiffWidget; protected _renderMime: IRenderMimeRegistry; + // @ts-expect-error Complex initialization protected _scroller: Panel; protected _trans: TranslationBundle; } diff --git a/src/components/diff/PlainTextDiff.ts b/src/components/diff/PlainTextDiff.ts index cea79e279..1098e955c 100644 --- a/src/components/diff/PlainTextDiff.ts +++ b/src/components/diff/PlainTextDiff.ts @@ -8,9 +8,7 @@ import { } from '@jupyterlab/translation'; import { PromiseDelegate } from '@lumino/coreutils'; import { Widget } from '@lumino/widgets'; -import { MergeView } from 'codemirror'; import { Git } from '../../tokens'; -import { MergeView as LocalMergeView, mergeView } from './mergeview'; /** * Diff callback to be registered for plain-text files. @@ -24,7 +22,10 @@ export const createPlainTextDiff: Git.Diff.ICallback = async ( toolbar?: Toolbar, translator?: ITranslator ): Promise => { - const widget = new PlainTextDiff(model, translator.load('jupyterlab_git')); + const widget = new PlainTextDiff( + model, + (translator ?? nullTranslator).load('jupyterlab_git') + ); await widget.ready; return widget; }; @@ -37,7 +38,7 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { super({ node: PlainTextDiff.createNode( model.reference.label, - model.base?.label, + model.base?.label ?? '', model.challenger.label ) }); diff --git a/src/components/diff/PreviewMainAreaWidget.ts b/src/components/diff/PreviewMainAreaWidget.ts index 9bb7bbb20..610e6a90d 100644 --- a/src/components/diff/PreviewMainAreaWidget.ts +++ b/src/components/diff/PreviewMainAreaWidget.ts @@ -15,7 +15,7 @@ export class PreviewMainAreaWidget< if (options.isPreview ?? true) { PreviewMainAreaWidget.disposePreviewWidget( - PreviewMainAreaWidget.previewWidget + PreviewMainAreaWidget.previewWidget! ); PreviewMainAreaWidget.previewWidget = this; } @@ -25,7 +25,7 @@ export class PreviewMainAreaWidget< * Dispose screen as a preview screen */ static disposePreviewWidget(isPreview: PreviewMainAreaWidget): void { - return isPreview && PreviewMainAreaWidget.previewWidget.dispose(); + return isPreview && PreviewMainAreaWidget.previewWidget?.dispose(); } /** @@ -41,7 +41,11 @@ export class PreviewMainAreaWidget< // Get the most recent tab opened const tab = tabPosition >= 0 ? tabBar.contentNode.children[tabPosition] : null; - const tabTitle = tab.querySelector('.lm-TabBar-tabLabel'); + const tabTitle = tab?.querySelector('.lm-TabBar-tabLabel'); + + if (!tabTitle) { + return; + } tabTitle.classList.add('jp-git-tab-mod-preview'); diff --git a/src/components/diff/mergeview.ts b/src/components/diff/mergeview.ts deleted file mode 100644 index 5d58b2e18..000000000 --- a/src/components/diff/mergeview.ts +++ /dev/null @@ -1,1959 +0,0 @@ -// This code is based on the CodeMirror merge add-on -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -// The linter must be relaxed on this imported file. -/* eslint-disable @typescript-eslint/ban-ts-comment */ -/* eslint-disable eqeqeq */ -/* eslint-disable no-inner-declarations */ -/* eslint-disable prefer-arrow-callback */ - -import CodeMirror from 'codemirror'; - -import { - diff_match_patch, - DIFF_EQUAL, - DIFF_DELETE, - DIFF_INSERT -} from 'diff-match-patch'; - -export const GutterID = 'CodeMirror-patchgutter'; - -enum DiffStatus { - Equal = DIFF_EQUAL, - Delete = DIFF_DELETE, - Insert = DIFF_INSERT -} - -export namespace MergeView { - /** - * Options available to MergeView. - */ - export interface IMergeViewEditorConfiguration - extends CodeMirror.EditorConfiguration { - /** - * Determines whether the original editor allows editing. Defaults to false. - */ - allowEditingOriginals?: boolean; - - /** - * When true stretches of unchanged text will be collapsed. When a number is given, this indicates the amount - * of lines to leave visible around such stretches (which defaults to 2). Defaults to false. - */ - collapseIdentical?: boolean | number; - - /** - * Sets the style used to connect changed chunks of code. By default, connectors are drawn. When this is set to "align", - * the smaller chunk is padded to align with the bigger chunk instead. - */ - connect?: string; - - /** - * Should the whitespace be ignored when comparing text - */ - ignoreWhitespace?: boolean; - - /** - * Callback for when stretches of unchanged text are collapsed. - */ - onCollapse?( - mergeView: IMergeViewEditor, - line: number, - size: number, - mark: CodeMirror.TextMarker - ): void; - - /** - * Provides original version of the document to be shown on the right of the editor. - */ - orig: any; - - /** - * Provides original version of the document to be shown on the left of the editor. - * To create a 2-way (as opposed to 3-way) merge view, provide only one of origLeft and origRight. - */ - origLeft?: any; - - /** - * Provides original version of document to be shown on the right of the editor. - * To create a 2-way (as opposed to 3-way) merge view, provide only one of origLeft and origRight. - */ - origRight?: any; - - /** - * Determines whether buttons that allow the user to revert changes are shown. Defaults to true. - */ - revertButtons?: boolean; - - /** - * When true, changed pieces of text are highlighted. Defaults to true. - */ - showDifferences?: boolean; - - /** - * Mapping of displayed string with their translation. - */ - phrases?: Record; - - revertChunk?: ( - mergeView: IMergeViewEditor, - from: CodeMirror.Editor, - origStart: CodeMirror.Position, - origEnd: CodeMirror.Position, - to: CodeMirror.Editor, - editStart: CodeMirror.Position, - editEnd: CodeMirror.Position - ) => void; - } - - export interface IMergeViewEditor { - /** - * Returns the editor instance. - */ - editor(): CodeMirror.Editor; - - /** - * Left side of the merge view. - */ - left: IDiffView; - leftChunks(): IMergeViewDiffChunk[]; - leftOriginal(): CodeMirror.Editor; - - /** - * Right side of the merge view. - */ - right: IDiffView; - rightChunks(): IMergeViewDiffChunk[]; - rightOriginal(): CodeMirror.Editor; - - /** - * Sets whether or not the merge view should show the differences between the editor views. - */ - setShowDifferences(showDifferences: boolean): void; - } - - /** - * Tracks changes in chunks from oroginal to new. - */ - export interface IMergeViewDiffChunk { - editFrom: number; - editTo: number; - origFrom: number; - origTo: number; - } - - export interface IDiffView { - /** - * Forces the view to reload. - */ - forceUpdate(): (mode: string) => void; - - /** - * Sets whether or not the merge view should show the differences between the editor views. - */ - setShowDifferences(showDifferences: boolean): void; - } - - export type Diff = [DiffStatus, string]; - - export interface IClasses { - chunk: string; - start: string; - end: string; - insert: string; - del: string; - connect: string; - classLocation?: string[]; - } - - export type PanelType = 'left' | 'right'; - - export interface IState { - from: number; - to: number; - marked: CodeMirror.LineHandle[]; - } -} - -const Pos = CodeMirror.Pos; -const svgNS = 'http://www.w3.org/2000/svg'; - -class DiffView implements MergeView.IDiffView { - constructor(mv: MergeView, type: MergeView.PanelType) { - this.mv = mv; - this.type = type; - this.classes = - type == 'left' - ? { - chunk: 'CodeMirror-merge-l-chunk', - start: 'CodeMirror-merge-l-chunk-start', - end: 'CodeMirror-merge-l-chunk-end', - insert: 'CodeMirror-merge-l-inserted', - del: 'CodeMirror-merge-l-deleted', - connect: 'CodeMirror-merge-l-connect' - } - : { - chunk: 'CodeMirror-merge-r-chunk', - start: 'CodeMirror-merge-r-chunk-start', - end: 'CodeMirror-merge-r-chunk-end', - insert: 'CodeMirror-merge-r-inserted', - del: 'CodeMirror-merge-r-deleted', - connect: 'CodeMirror-merge-r-connect' - }; - } - - init( - pane: HTMLElement, - orig: string | CodeMirror.Doc, - options: MergeView.IMergeViewEditorConfiguration - ): void { - this.edit = this.mv.edit; - (this.edit.state.diffViews || (this.edit.state.diffViews = [])).push(this); - this.orig = CodeMirror(pane, { - ...options, - value: orig, - readOnly: !this.mv.options.allowEditingOriginals - }); - if (this.mv.options.connect == 'align') { - if (!this.edit.state.trackAlignable) { - this.edit.state.trackAlignable = new TrackAlignable(this.edit); - } - this.orig.state.trackAlignable = new TrackAlignable(this.orig); - } - // @ts-ignore - this.lockButton.title = this.edit.phrase('Toggle locked scrolling'); - - this.orig.state.diffViews = [this]; - // @ts-ignore - let classLocation = options.chunkClassLocation || 'background'; - if (Object.prototype.toString.call(classLocation) != '[object Array]') { - classLocation = [classLocation]; - } - this.classes.classLocation = classLocation; - - this.diff = getDiff( - asString(orig), - asString(options.value), - this.mv.options.ignoreWhitespace - ); - this.chunks = getChunks(this.diff); - this.diffOutOfDate = this.dealigned = false; - this.needsScrollSync = null; - - this.showDifferences = options.showDifferences !== false; - } - - registerEvents(otherDv: DiffView): void { - this.forceUpdate = DiffView.registerUpdate(this); - DiffView.setScrollLock(this, true, false); - DiffView.registerScroll(this, otherDv); - } - - setShowDifferences(val: boolean): void { - val = val !== false; - if (val != this.showDifferences) { - this.showDifferences = val; - this.forceUpdate('full'); - } - } - - static setScrollLock(dv: DiffView, val: boolean, action?: boolean): void { - dv.lockScroll = val; - if (val && action != false) { - if (DiffView.syncScroll(dv, true)) { - makeConnections(dv); - } - } - // @ts-ignore - (val ? CodeMirror.addClass : CodeMirror.rmClass)( - dv.lockButton, - 'CodeMirror-merge-scrolllock-enabled' - ); - } - - private static registerUpdate(dv: DiffView): (mode?: string) => void { - const edit: MergeView.IState = { from: 0, to: 0, marked: [] }; - const orig: MergeView.IState = { from: 0, to: 0, marked: [] }; - let debounceChange: number; - let updatingFast = false; - - function update(mode?: string): void { - DiffView.updating = true; - updatingFast = false; - if (mode == 'full') { - // @ts-ignore - if (dv.svg) { - Private.clear(dv.svg); - } - // @ts-ignore - if (dv.copyButtons) { - Private.clear(dv.copyButtons); - } - clearMarks(dv.edit, edit.marked, dv.classes); - clearMarks(dv.orig, orig.marked, dv.classes); - edit.from = edit.to = orig.from = orig.to = 0; - } - ensureDiff(dv); - if (dv.showDifferences) { - updateMarks(dv.edit, dv.diff, edit, DiffStatus.Insert, dv.classes); - updateMarks(dv.orig, dv.diff, orig, DiffStatus.Delete, dv.classes); - } - - if (dv.mv.options.connect == 'align') { - alignChunks(dv); - } - makeConnections(dv); - if (dv.needsScrollSync != null) { - DiffView.syncScroll(dv, dv.needsScrollSync); - } - - DiffView.updating = false; - } - function setDealign(fast: boolean): void { - if (DiffView.updating) { - return; - } - dv.dealigned = true; - set(fast); - } - function set(fast: boolean): void { - if (DiffView.updating || updatingFast) { - return; - } - window.clearTimeout(debounceChange); - if (fast === true) { - updatingFast = true; - } - debounceChange = window.setTimeout(update, fast === true ? 20 : 250); - } - function change( - _cm: CodeMirror.Editor, - change: CodeMirror.EditorChangeLinkedList - ): void { - if (!dv.diffOutOfDate) { - dv.diffOutOfDate = true; - edit.from = edit.to = orig.from = orig.to = 0; - } - // Update faster when a line was added/removed - setDealign(change.text.length - 1 != change.to.line - change.from.line); - } - function swapDoc(): void { - dv.diffOutOfDate = true; - dv.dealigned = true; - update('full'); - } - dv.edit.on('change', change); - dv.orig.on('change', change); - dv.edit.on('swapDoc', swapDoc); - dv.orig.on('swapDoc', swapDoc); - if (dv.mv.options.connect === 'align') { - CodeMirror.on(dv.edit.state.trackAlignable, 'realign', setDealign); - CodeMirror.on(dv.orig.state.trackAlignable, 'realign', setDealign); - } - dv.edit.on('viewportChange', function () { - set(false); - }); - dv.orig.on('viewportChange', function () { - set(false); - }); - update(); - return update; - } - - private static registerScroll(dv: DiffView, otherDv: DiffView): void { - dv.edit.on('scroll', function () { - if (DiffView.syncScroll(dv, true)) { - makeConnections(dv); - } - }); - dv.orig.on('scroll', function () { - if (DiffView.syncScroll(dv, false)) { - makeConnections(dv); - } - if (otherDv) { - if (DiffView.syncScroll(otherDv, true)) { - makeConnections(otherDv); - } - } - }); - } - - private static syncScroll(dv: DiffView, toOrig: boolean): boolean { - // Change handler will do a refresh after a timeout when diff is out of date - if (dv.diffOutOfDate) { - if (dv.lockScroll && dv.needsScrollSync == null) { - dv.needsScrollSync = toOrig; - } - return false; - } - dv.needsScrollSync = null; - if (!dv.lockScroll) { - return true; - } - let editor: CodeMirror.Editor; - let other: CodeMirror.Editor; - const now = +new Date(); - if (toOrig) { - editor = dv.edit; - other = dv.orig; - } else { - editor = dv.orig; - other = dv.edit; - } - // Don't take action if the position of this editor was recently set - // (to prevent feedback loops) - if ( - editor.state.scrollSetBy == dv && - (editor.state.scrollSetAt || 0) + 250 > now - ) { - return false; - } - - const sInfo = editor.getScrollInfo(); - let targetPos = 0; - if (dv.mv.options.connect == 'align') { - targetPos = sInfo.top; - } else { - const halfScreen = 0.5 * sInfo.clientHeight; - const midY = sInfo.top + halfScreen; - const mid = editor.lineAtHeight(midY, 'local'); - const around = chunkBoundariesAround(dv.chunks, mid, toOrig); - const off = DiffView.getOffsets( - editor, - toOrig ? around.edit : around.orig - ); - const offOther = DiffView.getOffsets( - other, - toOrig ? around.orig : around.edit - ); - const ratio = (midY - off.top) / (off.bot - off.top); - targetPos = - offOther.top - halfScreen + ratio * (offOther.bot - offOther.top); - - let botDist: number; - let mix: number; - // Some careful tweaking to make sure no space is left out of view - // when scrolling to top or bottom. - if (targetPos > sInfo.top) { - mix = sInfo.top / halfScreen; - if (mix < 1) { - targetPos = targetPos * mix + sInfo.top * (1 - mix); - } - } else { - botDist = sInfo.height - sInfo.clientHeight - sInfo.top; - if (botDist < halfScreen) { - const otherInfo = other.getScrollInfo(); - const botDistOther = - otherInfo.height - otherInfo.clientHeight - targetPos; - if (botDistOther > botDist) { - mix = botDist / halfScreen; - if (mix < 1) { - targetPos = - targetPos * mix + - (otherInfo.height - otherInfo.clientHeight - botDist) * - (1 - mix); - } - } - } - } - } - - other.scrollTo(sInfo.left, targetPos); - other.state.scrollSetAt = now; - other.state.scrollSetBy = dv; - return true; - } - - private static getOffsets( - editor: CodeMirror.Editor, - around: { before: number | null; after: number | null } - ): { top: number; bot: number } { - let bot = around.after; - if (bot == null) { - // @ts-ignore - bot = editor.lastLine() + 1; - } - return { - top: editor.heightAtLine(around.before || 0, 'local'), - bot: editor.heightAtLine(bot, 'local') - }; - } - - mv: MergeView; - type: MergeView.PanelType; - classes: MergeView.IClasses; - edit: CodeMirror.Editor; - orig: CodeMirror.Editor; - lockButton: HTMLElement; - copyButtons: HTMLDivElement; - svg: SVGSVGElement; - gap: HTMLDivElement; - lockScroll: boolean; - diff: MergeView.Diff[]; - chunks: MergeView.IMergeViewDiffChunk[]; - dealigned: boolean; - diffOutOfDate: boolean; - needsScrollSync: boolean; - showDifferences: boolean; - forceUpdate: (mode?: string) => any; - private static updating = false; -} - -function ensureDiff(dv: DiffView): void { - if (dv.diffOutOfDate) { - dv.diff = getDiff( - dv.orig.getValue(), - dv.edit.getValue(), - dv.mv.options.ignoreWhitespace - ); - dv.chunks = getChunks(dv.diff); - dv.diffOutOfDate = false; - CodeMirror.signal(dv.edit, 'updateDiff', dv.diff); - } -} - -// Updating the marks for editor content - -function removeClass( - editor: CodeMirror.Editor, - line: any, - classes: MergeView.IClasses -): void { - const locs = classes.classLocation; - for (let i = 0; i < locs.length; i++) { - editor.removeLineClass(line, locs[i], classes.chunk); - editor.removeLineClass(line, locs[i], classes.start); - editor.removeLineClass(line, locs[i], classes.end); - } -} - -function isTextMarker( - marker: CodeMirror.TextMarker | CodeMirror.LineHandle -): marker is CodeMirror.TextMarker { - return 'clear' in marker; -} - -function clearMarks( - editor: CodeMirror.Editor, - arr: CodeMirror.TextMarker[] | CodeMirror.LineHandle[], - classes: MergeView.IClasses -): void { - for (let i = 0; i < arr.length; ++i) { - const mark = arr[i]; - if (isTextMarker(mark)) { - mark.clear(); - // @ts-ignore - } else if (mark.parent) { - removeClass(editor, mark, classes); - } - } - arr.length = 0; - - editor.clearGutter(GutterID); -} - -// FIXME maybe add a margin around viewport to prevent too many updates -function updateMarks( - editor: CodeMirror.Editor, - diff: MergeView.Diff[], - state: MergeView.IState, - type: DiffStatus, - classes: MergeView.IClasses -): void { - const vp = editor.getViewport(); - editor.operation(function () { - if ( - state.from == state.to || - vp.from - state.to > 20 || - state.from - vp.to > 20 - ) { - clearMarks(editor, state.marked, classes); - markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes); - state.from = vp.from; - state.to = vp.to; - } else { - if (vp.from < state.from) { - markChanges( - editor, - diff, - type, - state.marked, - vp.from, - state.from, - classes - ); - state.from = vp.from; - } - if (vp.to > state.to) { - markChanges(editor, diff, type, state.marked, state.to, vp.to, classes); - state.to = vp.to; - } - } - }); -} - -function addClass( - editor: CodeMirror.Editor, - lineNr: number, - classes: MergeView.IClasses, - main: boolean, - start: boolean, - end: boolean -): CodeMirror.LineHandle { - const locs = classes.classLocation; - // @ts-ignore - const line: CodeMirror.LineHandle = editor.getLineHandle(lineNr); - for (let i = 0; i < locs.length; i++) { - if (main) { - editor.addLineClass(line, locs[i], classes.chunk); - } - if (start) { - editor.addLineClass(line, locs[i], classes.start); - } - if (end) { - editor.addLineClass(line, locs[i], classes.end); - } - } - return line; -} - -function makeGutter(isDelete: boolean): HTMLDivElement { - const marker = document.createElement('div'); - marker.className = isDelete - ? 'CodeMirror-patchgutter-delete' - : 'CodeMirror-patchgutter-insert'; - return marker; -} - -function markChanges( - editor: CodeMirror.Editor, - diff: MergeView.Diff[], - type: DiffStatus, - marks: CodeMirror.LineHandle[], - from: number, - to: number, - classes: MergeView.IClasses -): void { - let pos = Pos(0, 0); - const top = Pos(from, 0); - // @ts-ignore - const bot = editor.clipPos(Pos(to - 1)); - const cls = type == DiffStatus.Delete ? classes.del : classes.insert; - function markChunk(start: number, end: number): void { - const bfrom = Math.max(from, start); - const bto = Math.min(to, end); - for (let i = bfrom; i < bto; ++i) { - marks.push(addClass(editor, i, classes, true, i == start, i == end - 1)); - editor.setGutterMarker( - i, - GutterID, - makeGutter(type == DiffStatus.Delete) - ); - } - // When the chunk is empty, make sure a horizontal line shows up - if (start == end && bfrom == end && bto == end) { - if (bfrom) { - marks.push(addClass(editor, bfrom - 1, classes, false, false, true)); - } else { - marks.push(addClass(editor, bfrom, classes, false, true, false)); - } - } - } - - let chunkStart = 0; - let pending = false; - for (let i = 0; i < diff.length; ++i) { - const part = diff[i]; - const tp = part[0]; - const str = part[1]; - if (tp == DiffStatus.Equal) { - const cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1); - moveOver(pos, str); - const cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0); - if (cleanTo > cleanFrom) { - if (pending) { - markChunk(chunkStart, cleanFrom); - pending = false; - } - chunkStart = cleanTo; - } - } else { - pending = true; - if (tp == type) { - const end = moveOver(pos, str, true); - const a = Private.posMax(top, pos); - const b = Private.posMin(bot, end); - if (!Private.posEq(a, b)) { - // @ts-ignore - marks.push(editor.markText(a, b, { className: cls })); - } - pos = end; - } - } - } - if (pending) { - markChunk(chunkStart, pos.line + 1); - } -} - -// Updating the gap between editor and original - -function makeConnections(dv: DiffView): void { - if (!dv.showDifferences) { - return; - } - - let w = 0; - if (dv.svg) { - Private.clear(dv.svg); - w = dv.gap.offsetWidth; - Private.attrs(dv.svg, 'width', w, 'height', dv.gap.offsetHeight); - } - if (dv.copyButtons) { - Private.clear(dv.copyButtons); - } - - const vpEdit = dv.edit.getViewport(); - const vpOrig = dv.orig.getViewport(); - const outerTop = dv.mv.wrap.getBoundingClientRect().top; - const sTopEdit = - outerTop - - dv.edit.getScrollerElement().getBoundingClientRect().top + - dv.edit.getScrollInfo().top; - const sTopOrig = - outerTop - - dv.orig.getScrollerElement().getBoundingClientRect().top + - dv.orig.getScrollInfo().top; - for (let i = 0; i < dv.chunks.length; i++) { - const ch = dv.chunks[i]; - if ( - ch.editFrom <= vpEdit.to && - ch.editTo >= vpEdit.from && - ch.origFrom <= vpOrig.to && - ch.origTo >= vpOrig.from - ) { - drawConnectorsForChunk(dv, ch, sTopOrig, sTopEdit, w); - } - } -} - -function getMatchingOrigLine( - editLine: number, - chunks: MergeView.IMergeViewDiffChunk[] -): number | null { - let editStart = 0; - let origStart = 0; - for (let i = 0; i < chunks.length; i++) { - const chunk = chunks[i]; - if (chunk.editTo > editLine && chunk.editFrom <= editLine) { - return null; - } - if (chunk.editFrom > editLine) { - break; - } - editStart = chunk.editTo; - origStart = chunk.origTo; - } - return origStart + (editLine - editStart); -} - -// Combines information about chunks and widgets/markers to return -// an array of lines, in a single editor, that probably need to be -// aligned with their counterparts in the editor next to it. -function alignableFor( - cm: CodeMirror.Editor, - chunks: MergeView.IMergeViewDiffChunk[], - isOrig: boolean -): number[] { - const tracker = cm.state.trackAlignable; - // @ts-ignore - let start: number = cm.firstLine(); - let trackI = 0; - const result: number[] = []; - for (let i = 0; ; i++) { - const chunk = chunks[i]; - const chunkStart = !chunk ? 1e9 : isOrig ? chunk.origFrom : chunk.editFrom; - for (; trackI < tracker.alignable.length; trackI += 2) { - const n: number = tracker.alignable[trackI] + 1; - if (n <= start) { - continue; - } - if (n <= chunkStart) { - result.push(n); - } else { - break; - } - } - if (!chunk) { - break; - } - result.push((start = isOrig ? chunk.origTo : chunk.editTo)); - } - return result; -} - -// Given information about alignable lines in two editors, fill in -// the result (an array of three-element arrays) to reflect the -// lines that need to be aligned with each other. -function mergeAlignable( - result: number[][], - origAlignable: number[], - chunks: MergeView.IMergeViewDiffChunk[], - setIndex: number -): void { - let rI = 0; - let origI = 0; - let chunkI = 0; - let diff = 0; - outer: for (; ; rI++) { - const nextR = result[rI]; - const nextO = origAlignable[origI]; - if (!nextR && nextO == null) { - break; - } - - const rLine = nextR ? nextR[0] : 1e9; - const oLine = nextO == null ? 1e9 : nextO; - while (chunkI < chunks.length) { - const chunk = chunks[chunkI]; - if (chunk.origFrom <= oLine && chunk.origTo > oLine) { - origI++; - rI--; - continue outer; - } - if (chunk.editTo > rLine) { - if (chunk.editFrom <= rLine) { - continue outer; - } - break; - } - diff += chunk.origTo - chunk.origFrom - (chunk.editTo - chunk.editFrom); - chunkI++; - } - if (rLine == oLine - diff) { - nextR[setIndex] = oLine; - origI++; - } else if (rLine < oLine - diff) { - nextR[setIndex] = rLine + diff; - } else { - const record = [oLine - diff, null, null]; - record[setIndex] = oLine; - result.splice(rI, 0, record); - origI++; - } - } -} - -function findAlignedLines(dv: DiffView, other: DiffView) { - const alignable = alignableFor(dv.edit, dv.chunks, false); - const result = []; - if (other) { - for (let i = 0, j = 0; i < other.chunks.length; i++) { - const n = other.chunks[i].editTo; - while (j < alignable.length && alignable[j] < n) { - j++; - } - if (j == alignable.length || alignable[j] != n) { - alignable.splice(j++, 0, n); - } - } - } - for (let i = 0; i < alignable.length; i++) { - result.push([alignable[i], null, null]); - } - - mergeAlignable(result, alignableFor(dv.orig, dv.chunks, true), dv.chunks, 1); - if (other) { - mergeAlignable( - result, - alignableFor(other.orig, other.chunks, true), - other.chunks, - 2 - ); - } - - return result; -} - -function alignChunks(dv: DiffView, force?: boolean) { - if (!dv.dealigned && !force) { - return; - } - // @ts-ignore - if (!dv.orig.curOp) { - return dv.orig.operation(function () { - alignChunks(dv, force); - }); - } - - dv.dealigned = false; - const other = dv.mv.left == dv ? dv.mv.right : dv.mv.left; - if (other) { - ensureDiff(other); - other.dealigned = false; - } - const linesToAlign = findAlignedLines(dv, other); - - // Clear old aligners - const aligners = dv.mv.aligners; - for (let i = 0; i < aligners.length; i++) { - aligners[i].clear(); - } - aligners.length = 0; - - const cm = [dv.edit, dv.orig]; - const scroll = []; - if (other) { - cm.push(other.orig); - } - for (let i = 0; i < cm.length; i++) { - scroll.push(cm[i].getScrollInfo().top); - } - - for (let ln = 0; ln < linesToAlign.length; ln++) { - alignLines(cm, linesToAlign[ln], aligners); - } - - for (let i = 0; i < cm.length; i++) { - cm[i].scrollTo(null, scroll[i]); - } -} - -function alignLines( - cm: CodeMirror.Editor[], - lines: number[], - aligners: CodeMirror.LineWidget[] -): void { - let maxOffset = 0; - const offset = []; - for (let i = 0; i < cm.length; i++) { - if (lines[i] != null) { - const off = cm[i].heightAtLine(lines[i], 'local'); - offset[i] = off; - maxOffset = Math.max(maxOffset, off); - } - } - for (let i = 0; i < cm.length; i++) { - if (lines[i] != null) { - const diff = maxOffset - offset[i]; - if (diff > 1) { - aligners.push(padAbove(cm[i], lines[i], diff)); - } - } - } -} - -function padAbove(cm: CodeMirror.Editor, line: number, size: number) { - let above = true; - // @ts-ignore - if (line > cm.lastLine()) { - line--; - above = false; - } - const elt = document.createElement('div'); - elt.className = 'CodeMirror-merge-spacer'; - elt.style.height = size + 'px'; - elt.style.minWidth = '1px'; - return cm.addLineWidget(line, elt, { - // @ts-ignore - height: size, - above: above, - mergeSpacer: true, - handleMouseEvents: true - }); -} - -function drawConnectorsForChunk( - dv: DiffView, - chunk: MergeView.IMergeViewDiffChunk, - sTopOrig: number, - sTopEdit: number, - w: number -) { - const flip = dv.type == 'left'; - const top = dv.orig.heightAtLine(chunk.origFrom, 'local', true) - sTopOrig; - if (dv.svg) { - let topLpx = top; - let topRpx = dv.edit.heightAtLine(chunk.editFrom, 'local', true) - sTopEdit; - if (flip) { - const tmp = topLpx; - topLpx = topRpx; - topRpx = tmp; - } - let botLpx = dv.orig.heightAtLine(chunk.origTo, 'local', true) - sTopOrig; - let botRpx = dv.edit.heightAtLine(chunk.editTo, 'local', true) - sTopEdit; - if (flip) { - const tmp = botLpx; - botLpx = botRpx; - botRpx = tmp; - } - const curveTop = - ' C ' + - w / 2 + - ' ' + - topRpx + - ' ' + - w / 2 + - ' ' + - topLpx + - ' ' + - (w + 2) + - ' ' + - topLpx; - const curveBot = - ' C ' + - w / 2 + - ' ' + - botLpx + - ' ' + - w / 2 + - ' ' + - botRpx + - ' -1 ' + - botRpx; - Private.attrs( - dv.svg.appendChild(document.createElementNS(svgNS, 'path')), - 'd', - 'M -1 ' + - topRpx + - curveTop + - ' L ' + - (w + 2) + - ' ' + - botLpx + - curveBot + - ' z', - 'class', - dv.classes.connect - ); - } - if (dv.copyButtons) { - const copy = dv.copyButtons.appendChild( - Private.elt( - 'div', - dv.type === 'left' ? '\u21dd' : '\u21dc', - 'CodeMirror-merge-copy' - ) - ); - const editOriginals = dv.mv.options.allowEditingOriginals; - // @ts-ignore - copy.title = dv.edit.phrase( - editOriginals ? 'Push to left' : 'Revert chunk' - ); - // @ts-ignore - copy.chunk = chunk; - copy.style.top = - (chunk.origTo > chunk.origFrom - ? top - : dv.edit.heightAtLine(chunk.editFrom, 'local') - sTopEdit) + 'px'; - - if (editOriginals) { - const topReverse = - dv.edit.heightAtLine(chunk.editFrom, 'local') - sTopEdit; - const copyReverse = dv.copyButtons.appendChild( - Private.elt( - 'div', - dv.type == 'right' ? '\u21dd' : '\u21dc', - 'CodeMirror-merge-copy-reverse' - ) - ); - copyReverse.title = 'Push to right'; - // @ts-ignore - copyReverse.chunk = { - editFrom: chunk.origFrom, - editTo: chunk.origTo, - origFrom: chunk.editFrom, - origTo: chunk.editTo - }; - copyReverse.style.top = topReverse + 'px'; - dv.type == 'right' - ? (copyReverse.style.left = '2px') - : (copyReverse.style.right = '2px'); - } - } -} - -function copyChunk( - dv: DiffView, - to: CodeMirror.Editor, - from: CodeMirror.Editor, - chunk: MergeView.IMergeViewDiffChunk -) { - if (dv.diffOutOfDate) { - return; - } - const origStart = - chunk.origTo > from.lastLine() - ? Pos(chunk.origFrom - 1) - : Pos(chunk.origFrom, 0); - const origEnd = Pos(chunk.origTo, 0); - const editStart = - chunk.editTo > to.lastLine() - ? Pos(chunk.editFrom - 1) - : Pos(chunk.editFrom, 0); - const editEnd = Pos(chunk.editTo, 0); - const handler = dv.mv.options.revertChunk; - if (handler) { - handler(dv.mv, from, origStart, origEnd, to, editStart, editEnd); - } else { - to.replaceRange(from.getRange(origStart, origEnd), editStart, editEnd); - } -} - -// Merge view, containing 0, 1, or 2 diff views. - -/** - * A function that calculates either a two-way or three-way merge between different sets of content. - */ -export function mergeView( - node: HTMLElement, - options?: MergeView.IMergeViewEditorConfiguration -): MergeView.IMergeViewEditor { - return new MergeView(node, options); -} - -class MergeView implements MergeView.IMergeViewEditor { - constructor( - node: HTMLElement, - options?: MergeView.IMergeViewEditorConfiguration - ) { - this.options = options; - const origLeft = options.origLeft == null ? options.orig : options.origLeft; - const origRight = options.origRight; - - const hasLeft = origLeft != null; - const hasRight = origRight != null; - - const panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0); - const wrap: HTMLDivElement[] = []; - let left: DiffView | null = (this.left = null); - let right: DiffView | null = (this.right = null); - const self = this; - - let leftPane: HTMLDivElement = null; - if (hasLeft) { - left = this.left = new DiffView(this, 'left'); - leftPane = Private.elt( - 'div', - null, - 'CodeMirror-merge-pane CodeMirror-merge-left' - ); - wrap.push(leftPane); - wrap.push(buildGap(left)); - } - - const editPane = Private.elt( - 'div', - null, - 'CodeMirror-merge-pane CodeMirror-merge-editor' - ); - wrap.push(editPane); - - let rightPane: HTMLDivElement = null; - if (hasRight) { - right = this.right = new DiffView(this, 'right'); - wrap.push(buildGap(right)); - rightPane = Private.elt( - 'div', - null, - 'CodeMirror-merge-pane CodeMirror-merge-right' - ); - wrap.push(rightPane); - } - - (hasRight ? rightPane : editPane).className += - ' CodeMirror-merge-pane-rightmost'; - - wrap.push(Private.elt('div', null, null, 'height: 0; clear: both;')); - - const wrapElt = (this.wrap = node.appendChild( - Private.elt( - 'div', - wrap, - 'CodeMirror-merge CodeMirror-merge-' + panes + 'pane' - ) - )); - this.edit = CodeMirror(editPane, { ...options }); - // Add gutter - const gutters = this.edit.getOption('gutters'); - if (gutters.indexOf(GutterID) < 0) { - const newGutters: string[] = []; - if (this.edit.getOption('lineNumbers')) { - newGutters.push('CodeMirror-linenumbers'); - } - newGutters.push(GutterID); - this.edit.setOption('gutters', newGutters); - options['gutters'] = newGutters; - } - - if (left) { - left.init(leftPane, origLeft, options); - } - if (right) { - right.init(rightPane, origRight, options); - } - if (options.collapseIdentical) { - this.editor().operation(function () { - collapseIdenticalStretches(self, options.collapseIdentical); - }); - } - if (options.connect == 'align') { - this.aligners = []; - alignChunks(this.left || this.right, true); - } - if (left) { - left.registerEvents(right); - } - if (right) { - right.registerEvents(left); - } - - const onResize = function () { - if (left) { - makeConnections(left); - } - if (right) { - makeConnections(right); - } - }; - CodeMirror.on(window, 'resize', onResize); - const resizeInterval = setInterval(function () { - let p = null; - for ( - p = wrapElt.parentNode; - p && p !== document.body; - p = p.parentNode - ) {} // eslint-disable-line no-empty - if (!p) { - clearInterval(resizeInterval); - CodeMirror.off(window, 'resize', onResize); - } - }, 5000); - } - - editor(): CodeMirror.Editor { - return this.edit; - } - - rightOriginal(): CodeMirror.Editor { - return this.right && this.right.orig; - } - - leftOriginal(): CodeMirror.Editor { - return this.left && this.left.orig; - } - - setShowDifferences(val: boolean) { - if (this.right) { - this.right.setShowDifferences(val); - } - if (this.left) { - this.left.setShowDifferences(val); - } - } - - rightChunks() { - if (this.right) { - ensureDiff(this.right); - return this.right.chunks; - } - } - - leftChunks() { - if (this.left) { - ensureDiff(this.left); - return this.left.chunks; - } - } - - options: MergeView.IMergeViewEditorConfiguration; - left: DiffView | null; - right: DiffView | null; - wrap: HTMLDivElement; - edit: CodeMirror.Editor; - aligners: CodeMirror.LineWidget[]; -} - -function buildGap(dv: DiffView) { - const lock = (dv.lockButton = Private.elt( - 'div', - null, - 'CodeMirror-merge-scrolllock' - )); - const lockWrap = Private.elt( - 'div', - [lock], - 'CodeMirror-merge-scrolllock-wrap' - ); - CodeMirror.on(lock, 'click', function () { - DiffView.setScrollLock(dv, !dv.lockScroll); - }); - const gapElts: Element[] = [lockWrap]; - if (dv.mv.options.revertButtons !== false) { - dv.copyButtons = Private.elt( - 'div', - null, - 'CodeMirror-merge-copybuttons-' + dv.type - ); - CodeMirror.on(dv.copyButtons, 'click', function (e: MouseEvent) { - const node = (e.target || e.srcElement) as any; - if (!node.chunk) { - return; - } - if (node.className == 'CodeMirror-merge-copy-reverse') { - copyChunk(dv, dv.orig, dv.edit, node.chunk); - return; - } - copyChunk(dv, dv.edit, dv.orig, node.chunk); - }); - gapElts.unshift(dv.copyButtons); - } - if (dv.mv.options.connect != 'align') { - let svg = - document.createElementNS && document.createElementNS(svgNS, 'svg'); - if (svg && !svg.createSVGRect) { - svg = null; - } - dv.svg = svg; - if (svg) { - gapElts.push(svg); - } - } - - return (dv.gap = Private.elt('div', gapElts, 'CodeMirror-merge-gap')); -} - -function asString(obj: string | CodeMirror.Doc) { - if (typeof obj == 'string') { - return obj; - } else { - return obj.getValue(); - } -} - -// Operations on diffs -let dmp: diff_match_patch; -function getDiff( - a: string, - b: string, - ignoreWhitespace?: boolean -): MergeView.Diff[] { - if (!dmp) { - dmp = new diff_match_patch(); - } - - const diff = dmp.diff_main(a, b); - dmp.diff_cleanupSemantic(diff); - // The library sometimes leaves in empty parts, which confuse the algorithm - for (let i = 0; i < diff.length; ++i) { - const part = diff[i]; - if (ignoreWhitespace ? !/[^ \t]/.test(part[1]) : !part[1]) { - diff.splice(i--, 1); - } else if (i && diff[i - 1][0] == part[0]) { - diff.splice(i--, 1); - diff[i][1] += part[1]; - } - } - return diff; -} - -function getChunks(diff: MergeView.Diff[]): MergeView.IMergeViewDiffChunk[] { - const chunks: MergeView.IMergeViewDiffChunk[] = []; - if (!diff.length) { - return chunks; - } - let startEdit = 0; - let startOrig = 0; - const edit = Pos(0, 0); - const orig = Pos(0, 0); - for (let i = 0; i < diff.length; ++i) { - const part = diff[i]; - const tp = part[0]; - if (tp == DiffStatus.Equal) { - const startOff = - !startOfLineClean(diff, i) || - edit.line < startEdit || - orig.line < startOrig - ? 1 - : 0; - const cleanFromEdit = edit.line + startOff; - const cleanFromOrig = orig.line + startOff; - moveOver(edit, part[1], null, orig); - const endOff = endOfLineClean(diff, i) ? 1 : 0; - const cleanToEdit = edit.line + endOff; - const cleanToOrig = orig.line + endOff; - if (cleanToEdit > cleanFromEdit) { - if (i) { - chunks.push({ - origFrom: startOrig, - origTo: cleanFromOrig, - editFrom: startEdit, - editTo: cleanFromEdit - }); - } - startEdit = cleanToEdit; - startOrig = cleanToOrig; - } - } else { - moveOver(tp == DiffStatus.Insert ? edit : orig, part[1]); - } - } - if (startEdit <= edit.line || startOrig <= orig.line) { - chunks.push({ - origFrom: startOrig, - origTo: orig.line + 1, - editFrom: startEdit, - editTo: edit.line + 1 - }); - } - return chunks; -} - -function endOfLineClean(diff: MergeView.Diff[], i: number): boolean { - if (i === diff.length - 1) { - return true; - } - let next = diff[i + 1][1]; - if ((next.length === 1 && i < diff.length - 2) || next.charCodeAt(0) !== 10) { - return false; - } - if (i === diff.length - 2) { - return true; - } - next = diff[i + 2][1]; - return (next.length > 1 || i == diff.length - 3) && next.charCodeAt(0) === 10; -} - -function startOfLineClean(diff: MergeView.Diff[], i: number): boolean { - if (i === 0) { - return true; - } - let last = diff[i - 1][1]; - if (last.charCodeAt(last.length - 1) != 10) { - return false; - } - if (i == 1) { - return true; - } - last = diff[i - 2][1]; - return last.charCodeAt(last.length - 1) == 10; -} - -function chunkBoundariesAround( - chunks: MergeView.IMergeViewDiffChunk[], - n: number, - nInEdit: boolean -) { - let beforeE: number; - let afterE: number; - let beforeO: number; - let afterO: number; - for (let i = 0; i < chunks.length; i++) { - const chunk = chunks[i]; - const fromLocal = nInEdit ? chunk.editFrom : chunk.origFrom; - const toLocal = nInEdit ? chunk.editTo : chunk.origTo; - if (afterE == null) { - if (fromLocal > n) { - afterE = chunk.editFrom; - afterO = chunk.origFrom; - } else if (toLocal > n) { - afterE = chunk.editTo; - afterO = chunk.origTo; - } - } - if (toLocal <= n) { - beforeE = chunk.editTo; - beforeO = chunk.origTo; - } else if (fromLocal <= n) { - beforeE = chunk.editFrom; - beforeO = chunk.origFrom; - } - } - return { - edit: { before: beforeE, after: afterE }, - orig: { before: beforeO, after: afterO } - }; -} - -function collapseSingle( - cm: CodeMirror.Editor, - from: number, - to: number -): { mark: CodeMirror.TextMarker; clear: () => void } { - cm.addLineClass(from, 'wrap', 'CodeMirror-merge-collapsed-line'); - const widget = document.createElement('span'); - widget.className = 'CodeMirror-merge-collapsed-widget'; - // @ts-ignore - widget.title = cm.phrase('Identical text collapsed. Click to expand.'); - // @ts-ignore - const mark = cm.markText(Pos(from, 0), Pos(to - 1), { - inclusiveLeft: true, - inclusiveRight: true, - replacedWith: widget, - clearOnEnter: true - }); - function clear() { - mark.clear(); - cm.removeLineClass(from, 'wrap', 'CodeMirror-merge-collapsed-line'); - } - // @ts-ignore - if (mark.explicitlyCleared) { - clear(); - } - CodeMirror.on(widget, 'click', clear); - mark.on('clear', clear); - CodeMirror.on(widget, 'click', clear); - return { mark: mark, clear: clear }; -} - -function collapseStretch(size: number, editors: any[]): any { - const marks: Array<{ - mark: CodeMirror.TextMarker; - clear: () => void; - }> = []; - function clear() { - for (let i = 0; i < marks.length; i++) { - marks[i].clear(); - } - } - for (let i = 0; i < editors.length; i++) { - const editor = editors[i]; - const mark = collapseSingle(editor.cm, editor.line, editor.line + size); - marks.push(mark); - mark.mark.on('clear', clear); - } - return marks[0].mark; -} - -function unclearNearChunks( - dv: DiffView, - margin: number, - off: number, - clear: boolean[] -) { - for (let i = 0; i < dv.chunks.length; i++) { - const chunk = dv.chunks[i]; - for (let l = chunk.editFrom - margin; l < chunk.editTo + margin; l++) { - const pos = l + off; - if (pos >= 0 && pos < clear.length) { - clear[pos] = false; - } - } - } -} - -function collapseIdenticalStretches(mv: MergeView, margin: number | boolean) { - if (typeof margin != 'number') { - margin = 2; - } - const clear: boolean[] = []; - const edit = mv.editor(); - // @ts-ignore - const off: number = edit.firstLine(); - // @ts-ignore - for (let l = off, e = edit.lastLine(); l <= e; l++) { - clear.push(true); - } - if (mv.left) { - unclearNearChunks(mv.left, margin, off, clear); - } - if (mv.right) { - unclearNearChunks(mv.right, margin, off, clear); - } - - for (let i = 0; i < clear.length; i++) { - if (clear[i]) { - const line = i + off; - let size = 0; - for (size = 1; i < clear.length - 1 && clear[i + 1]; i++, size++) {} // eslint-disable-line no-empty - if (size > margin) { - const editors: { line: number; cm: CodeMirror.Editor }[] = [ - { line: line, cm: edit } - ]; - if (mv.left) { - editors.push({ - line: getMatchingOrigLine(line, mv.left.chunks), - cm: mv.left.orig - }); - } - if (mv.right) { - editors.push({ - line: getMatchingOrigLine(line, mv.right.chunks), - cm: mv.right.orig - }); - } - const mark = collapseStretch(size, editors); - if (mv.options.onCollapse) { - mv.options.onCollapse(mv, line, size, mark); - } - } - } - } -} - -function moveOver( - pos: CodeMirror.Position, - str: string, - copy?: boolean, - other?: CodeMirror.Position -): CodeMirror.Position { - const out = copy ? Pos(pos.line, pos.ch) : pos; - let at = 0; - for (;;) { - const nl = str.indexOf('\n', at); - if (nl == -1) { - break; - } - ++out.line; - if (other) { - ++other.line; - } - at = nl + 1; - } - out.ch = (at ? 0 : out.ch) + (str.length - at); - if (other) { - other.ch = (at ? 0 : other.ch) + (str.length - at); - } - return out; -} - -// Tracks collapsed markers and line widgets, in order to be able to -// accurately align the content of two editors. -enum Alignement { - F_WIDGET = 1, - F_WIDGET_BELOW = 2, - F_MARKER = 4 -} - -class TrackAlignable { - cm: CodeMirror.Editor; - alignable: Array; - height: number; - - constructor(cm: CodeMirror.Editor) { - this.cm = cm; - this.alignable = []; - // @ts-ignore - this.height = cm.doc.height; - const self = this; - // @ts-ignore - cm.on('markerAdded', function (_, marker) { - if (!marker.collapsed) { - return; - } - const found = marker.find(1); - if (found != null) { - self.set(found.line, Alignement.F_MARKER); - } - }); - // @ts-ignore - cm.on('markerCleared', function (_, marker, _min, max) { - if (max !== null && marker.collapsed) { - self.check(max, Alignement.F_MARKER, self.hasMarker); - } - }); - cm.on('markerChanged', this.signal.bind(this)); - // @ts-ignore - cm.on('lineWidgetAdded', function (_, widget, lineNo) { - if (widget.mergeSpacer) { - return; - } - if (widget.above) { - self.set(lineNo - 1, Alignement.F_WIDGET_BELOW); - } else { - self.set(lineNo, Alignement.F_WIDGET); - } - }); - // @ts-ignore - cm.on('lineWidgetCleared', function (_, widget, lineNo) { - if (widget.mergeSpacer) { - return; - } - if (widget.above) { - self.check(lineNo - 1, Alignement.F_WIDGET_BELOW, self.hasWidgetBelow); - } else { - self.check(lineNo, Alignement.F_WIDGET, self.hasWidget); - } - }); - cm.on('lineWidgetChanged', this.signal.bind(this)); - cm.on('change', function (_, change) { - const start = change.from.line; - const nBefore = change.to.line - change.from.line; - const nAfter = change.text.length - 1; - const end = start + nAfter; - if (nBefore || nAfter) { - self.map(start, nBefore, nAfter); - } - self.check(end, Alignement.F_MARKER, self.hasMarker); - if (nBefore || nAfter) { - self.check(change.from.line, Alignement.F_MARKER, self.hasMarker); - } - }); - cm.on('viewportChange', function () { - // @ts-ignore - if (self.cm.doc.height !== self.height) { - self.signal(); - } - }); - } - - signal() { - CodeMirror.signal(this, 'realign'); - // @ts-ignore - this.height = this.cm.doc.height; - } - - set(n: number, flags: Alignement) { - let pos = -1; - for (; pos < this.alignable.length; pos += 2) { - const diff = this.alignable[pos] - n; - if (diff == 0) { - if ((this.alignable[pos + 1] & flags) == flags) { - return; - } - this.alignable[pos + 1] |= flags; - this.signal(); - return; - } - if (diff > 0) { - break; - } - } - this.signal(); - this.alignable.splice(pos, 0, n, flags); - } - - find(n: number): number { - for (let i = 0; i < this.alignable.length; i += 2) { - if (this.alignable[i] == n) { - return i; - } - } - return -1; - } - - check(n: number, flag: Alignement, pred: (n: number) => boolean) { - const found = this.find(n); - if (found == -1 || !(this.alignable[found + 1] & flag)) { - return; - } - if (!pred.call(this, n)) { - this.signal(); - const flags = this.alignable[found + 1] & ~flag; - if (flags) { - this.alignable[found + 1] = flags; - } else { - this.alignable.splice(found, 2); - } - } - } - - hasMarker(n: number): boolean { - const handle = this.cm.getLineHandle(n) as any; - if (handle.markedSpans) { - for (let i = 0; i < handle.markedSpans.length; i++) { - if ( - handle.markedSpans[i].marker.collapsed && - handle.markedSpans[i].to !== null - ) { - return true; - } - } - } - return false; - } - - hasWidget(n: number): boolean { - const handle = this.cm.getLineHandle(n) as any; - if (handle.widgets) { - for (let i = 0; i < handle.widgets.length; i++) { - if (!handle.widgets[i].above && !handle.widgets[i].mergeSpacer) { - return true; - } - } - } - return false; - } - - hasWidgetBelow(n: number): boolean { - // @ts-ignore - if (n == this.cm.lastLine()) { - return false; - } - - const handle = this.cm.getLineHandle(n + 1) as any; - if (handle.widgets) { - for (let i = 0; i < handle.widgets.length; i++) { - if (handle.widgets[i].above && !handle.widgets[i].mergeSpacer) { - return true; - } - } - } - return false; - } - - map(from: number, nBefore: number, nAfter: number) { - const diff = nAfter - nBefore; - const to = from + nBefore; - let widgetFrom = -1; - let widgetTo = -1; - for (let i = 0; i < this.alignable.length; i += 2) { - const n = this.alignable[i]; - if (n == from && this.alignable[i + 1] & Alignement.F_WIDGET_BELOW) { - widgetFrom = i; - } - if (n == to && this.alignable[i + 1] & Alignement.F_WIDGET_BELOW) { - widgetTo = i; - } - if (n <= from) { - continue; - } else if (n < to) { - this.alignable.splice(i--, 2); - } else { - this.alignable[i] += diff; - } - } - if (widgetFrom > -1) { - const flags = this.alignable[widgetFrom + 1]; - if (flags == Alignement.F_WIDGET_BELOW) { - this.alignable.splice(widgetFrom, 2); - } else { - this.alignable[widgetFrom + 1] = flags & ~Alignement.F_WIDGET_BELOW; - } - } - if (widgetTo > -1 && nAfter) { - this.set(from + nAfter, Alignement.F_WIDGET_BELOW); - } - } -} - -// @ts-ignore -CodeMirror.commands.goNextDiff = function (cm: CodeMirror.Editor) { - return Private.goNearbyDiff(cm, 1); -}; - -// @ts-ignore -CodeMirror.commands.goPrevDiff = function (cm: CodeMirror.Editor) { - return Private.goNearbyDiff(cm, -1); -}; - -namespace Private { - // General utilities - - export function elt( - tag: K, - content: Node[] | string, - className: string, - style?: string - ): HTMLElementTagNameMap[K] { - const e = document.createElement(tag); - if (className) { - e.className = className; - } - if (style) { - e.style.cssText = style; - } - if (typeof content == 'string') { - e.appendChild(document.createTextNode(content)); - } else if (content) { - for (let i = 0; i < content.length; ++i) { - e.appendChild(content[i]); - } - } - return e; - } - - export function clear(node: ChildNode): void { - for (let count = node.childNodes.length; count > 0; --count) { - node.removeChild(node.firstChild); - } - } - - export function attrs(elt: Element, ...args: any[]): void { - for (let i = 1; i < args.length; i += 2) { - elt.setAttribute(args[i], args[i + 1]); - } - } - - export function posMin( - a: CodeMirror.Position, - b: CodeMirror.Position - ): CodeMirror.Position { - return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; - } - export function posMax( - a: CodeMirror.Position, - b: CodeMirror.Position - ): CodeMirror.Position { - return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; - } - export function posEq( - a: CodeMirror.Position, - b: CodeMirror.Position - ): boolean { - return a.line == b.line && a.ch == b.ch; - } - - function findPrevDiff( - chunks: MergeView.IMergeViewDiffChunk[], - start: number, - isOrig: boolean - ) { - for (let i = chunks.length - 1; i >= 0; i--) { - const chunk = chunks[i]; - const to = (isOrig ? chunk.origTo : chunk.editTo) - 1; - if (to < start) { - return to; - } - } - } - - function findNextDiff( - chunks: MergeView.IMergeViewDiffChunk[], - start: number, - isOrig: boolean - ) { - for (let i = 0; i < chunks.length; i++) { - const chunk = chunks[i]; - const from = isOrig ? chunk.origFrom : chunk.editFrom; - if (from > start) { - return from; - } - } - } - - export function goNearbyDiff( - cm: CodeMirror.Editor, - dir: number - ): void | { - toString(): 'CodeMirror.PASS'; - } { - let found = null; - const views = cm.state.diffViews; - // @ts-ignore - const line = cm.getCursor().line; - if (views) { - for (let i = 0; i < views.length; i++) { - const dv = views[i]; - const isOrig = cm == dv.orig; - ensureDiff(dv); - const pos = - dir < 0 - ? findPrevDiff(dv.chunks, line, isOrig) - : findNextDiff(dv.chunks, line, isOrig); - if ( - pos != null && - (found == null || (dir < 0 ? pos > found : pos < found)) - ) { - found = pos; - } - } - } - if (found != null) { - // @ts-ignore - cm.setCursor(found, 0); - } else { - return CodeMirror.Pass; - } - } -} diff --git a/src/components/diff/model.ts b/src/components/diff/model.ts index 227c9b63c..c106462bf 100644 --- a/src/components/diff/model.ts +++ b/src/components/diff/model.ts @@ -129,5 +129,5 @@ export class DiffModel implements IDisposable, Git.Diff.IModel { private _changed: Signal; private _isDisposed = false; private _filename: string; - private _repositoryPath: string; + private _repositoryPath: string | undefined; } diff --git a/src/git.ts b/src/git.ts index 1692e7e3a..165c836cd 100644 --- a/src/git.ts +++ b/src/git.ts @@ -28,7 +28,7 @@ export const AUTH_ERROR_MESSAGES = [ export async function requestAPI( endPoint = '', method = 'GET', - body: ReadonlyJSONObject | null = null, + body: Partial | null = null, namespace = 'git' ): Promise { // Make request to Jupyter API diff --git a/src/index.ts b/src/index.ts index 38baddaf1..6a953fe7f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -77,8 +77,7 @@ async function activate( palette: ICommandPalette | null, translator: ITranslator | null ): Promise { - let gitExtension: GitExtension | null = null; - let settings: ISettingRegistry.ISettings; + let settings: ISettingRegistry.ISettings | undefined = undefined; let serverSettings: Git.IServerSettings; // Get a reference to the default file browser extension // We don't use the current tracked browser because extension like jupyterlab-github @@ -140,10 +139,11 @@ async function activate( error.message, [Dialog.warnButton({ label: trans.__('Dismiss') })] ); + // @ts-expect-error unable to initialize the extension token. return null; } // Create the Git model - gitExtension = new GitExtension(docmanager, app.docRegistry, settings); + const gitExtension = new GitExtension(docmanager, app.docRegistry, settings); // Whenever we restore the application, sync the Git extension path Promise.all([app.restored, fileBrowser.model.restored]).then(() => { diff --git a/src/model.ts b/src/model.ts index 4358c08b8..faac2a7d6 100644 --- a/src/model.ts +++ b/src/model.ts @@ -25,7 +25,7 @@ const DIFF_PROVIDERS: { export function getDiffProvider( filename: string ): Git.Diff.ICallback | undefined { - return DIFF_PROVIDERS[PathExt.extname(filename)?.toLocaleLowerCase()] + return DIFF_PROVIDERS[PathExt.extname(filename)?.toLocaleLowerCase() ?? ''] ?.callback; } @@ -41,8 +41,8 @@ export class GitExtension implements IGitExtension { * @returns extension model */ constructor( - docmanager: IDocumentManager = null, - docRegistry: DocumentRegistry = null, + docmanager: IDocumentManager | null = null, + docRegistry: DocumentRegistry | null = null, settings?: ISettingRegistry.ISettings ) { this._docmanager = docmanager; @@ -97,7 +97,7 @@ export class GitExtension implements IGitExtension { /** * The current repository branch. */ - get currentBranch(): Git.IBranch { + get currentBranch(): Git.IBranch | null { return this._currentBranch; } @@ -135,7 +135,7 @@ export class GitExtension implements IGitExtension { } set pathRepository(v: string | null) { - const change: IChangedArgs = { + const change: IChangedArgs = { name: 'pathRepository', newValue: null, oldValue: this._pathRepository @@ -213,7 +213,7 @@ export class GitExtension implements IGitExtension { return this._lastAuthor; } - set lastAuthor(lastAuthor: Git.IIdentity) { + set lastAuthor(lastAuthor: Git.IIdentity | null) { this._lastAuthor = lastAuthor; } @@ -299,13 +299,13 @@ export class GitExtension implements IGitExtension { } /** - * A signal emitted when the current Git repository changes. + * A signal emitted when the Git repository remote changes. */ - get notifyRemoteChanges(): ISignal< + get remoteChanged(): ISignal< IGitExtension, - Git.IRemoteChangedNotification + Git.IRemoteChangedNotification | null > { - return this._notifyRemoteChanges; + return this._remoteChanged; } /** @@ -358,7 +358,11 @@ export class GitExtension implements IGitExtension { * * Note: This makes sure it always returns non null value */ - protected get _currentMarker(): BranchMarker { + protected get _currentMarker(): BranchMarker | null { + if (!this.pathRepository) { + return null; + } + if (!this.__currentMarker) { this._setMarker( this.pathRepository, @@ -402,7 +406,7 @@ export class GitExtension implements IGitExtension { * @returns The file status or null if path repository is null or path not in repository */ getFile(path: string): Git.IStatusFile | null { - if (this.pathRepository === null) { + if (!this.pathRepository || this._status === null) { return null; } const fileStatus = this._status.files.find(status => { @@ -589,7 +593,7 @@ export class GitExtension implements IGitExtension { body.checkout_branch = true; body.new_check = options.newBranch === true; if (options.newBranch) { - body.startpoint = options.startpoint || this._currentBranch.name; + body.startpoint = options.startpoint || this._currentBranch!.name; } } else if (options.filename) { body.filename = options.filename; @@ -604,7 +608,7 @@ export class GitExtension implements IGitExtension { if (!body.new_check) { if (body.checkout_branch && !body.new_check) { changes = await this._changedFiles( - this._currentBranch.name, + this._currentBranch!.name, body.branchname ); } else if (body.filename) { @@ -704,16 +708,16 @@ export class GitExtension implements IGitExtension { * @throws {ServerConnection.NetworkError} If the request cannot be made */ async commit( - message?: string, + message: string | null = null, amend = false, - author?: string + author: string | null = null ): Promise { const path = await this._getPathRepository(); await this._taskHandler.execute('git:commit:create', async () => { await requestAPI(URLExt.join(path, 'commit'), 'POST', { commit_msg: message, amend: amend, - author: author + author: author ?? null }); }); await this.refresh(); @@ -796,7 +800,7 @@ export class GitExtension implements IGitExtension { } ); - data.modified_files = data.modified_files.map(f => { + data.modified_files = (data.modified_files ?? []).map(f => { f.type = this._resolveFileType(f.modified_file_path); return f; }); @@ -832,7 +836,7 @@ export class GitExtension implements IGitExtension { ); } ); - data.result = data.result.map(f => { + data.result = (data.result ?? []).map(f => { f.filetype = this._resolveFileType(f.filename); return f; }); @@ -850,7 +854,7 @@ export class GitExtension implements IGitExtension { this._fetchPoll.dispose(); this._statusPoll.dispose(); this._taskHandler.dispose(); - this._settings.changed.disconnect(this._onSettingsChange, this); + this._settings?.changed.disconnect(this._onSettingsChange, this); Signal.clearData(this); } @@ -1134,8 +1138,8 @@ export class GitExtension implements IGitExtension { headChanged = this._currentBranch !== data.current_branch; // Object comparison is not working } else { headChanged = - this._currentBranch.name !== data.current_branch.name || - this._currentBranch.top_commit !== data.current_branch.top_commit; + this._currentBranch.name !== data.current_branch?.name || + this._currentBranch.top_commit !== data.current_branch?.top_commit; } const branchesChanged = !JSONExt.deepEqual( @@ -1145,10 +1149,10 @@ export class GitExtension implements IGitExtension { this._branches = data.branches ?? []; - this._currentBranch = data.current_branch; - if (this._currentBranch) { + this._currentBranch = data.current_branch ?? null; + if (this._currentBranch && this._pathRepository) { // Set up the marker obj for the current (valid) repo/branch combination - this._setMarker(this.pathRepository, this._currentBranch.name); + this._setMarker(this.pathRepository!, this._currentBranch.name); } if (headChanged) { this._headChanged.emit(); @@ -1260,12 +1264,12 @@ export class GitExtension implements IGitExtension { }; }); this._setStatus({ - branch: data.branch || null, - remote: data.remote || null, - ahead: data.ahead || 0, - behind: data.behind || 0, + branch: data.branch ?? null, + remote: data.remote ?? null, + ahead: data.ahead ?? 0, + behind: data.behind ?? 0, state: data.state ?? 0, - files + files: files ?? [] }); await this.refreshDirtyStatus(); } catch (err) { @@ -1282,15 +1286,14 @@ export class GitExtension implements IGitExtension { */ async remoteChangedFiles(): Promise { // if a file is changed on remote add it to list of files with appropriate status. - this._remoteChangedFiles = []; + this._remoteChangedFiles.length = 0; try { - let remoteChangedFiles: null | string[] = null; if (this.status.remote && this.status.behind > 0) { - remoteChangedFiles = ( - await this._changedFiles('WORKING', this.status.remote) - ).files; - remoteChangedFiles?.forEach(element => { - this._remoteChangedFiles.push({ + this._remoteChangedFiles.concat( + ( + (await this._changedFiles('WORKING', this.status.remote)).files ?? + [] + ).map(element => ({ status: 'remote-changed', type: this._resolveFileType(element), x: '?', @@ -1298,14 +1301,13 @@ export class GitExtension implements IGitExtension { to: element, from: '?', is_binary: false - }); - }); - return this._remoteChangedFiles; + })) + ); } } catch (err) { console.error(err); - return this._remoteChangedFiles; } + return this._remoteChangedFiles; } /** @@ -1318,9 +1320,11 @@ export class GitExtension implements IGitExtension { const notNotified: Git.IStatusFile[] = []; const notified: Git.IStatusFile[] = []; for (const val of this._remoteChangedFiles) { - const docWidget = this._docmanager.findWidget( - this.getRelativeFilePath(val.to) - ); + const filePath = this.getRelativeFilePath(val.to); + if (!filePath) { + continue; + } + const docWidget = this._docmanager?.findWidget(filePath); const notifiedIndex = this._changeUpstreamNotified.findIndex( notified => notified.from === val.from && @@ -1345,9 +1349,9 @@ export class GitExtension implements IGitExtension { } } } - if (this._settings.composite['openFilesBehindWarning']) { + if (this._settings?.composite['openFilesBehindWarning']) { if (notNotified.length > 0) { - this._notifyRemoteChanges.emit({ notNotified, notified }); + this._remoteChanged.emit({ notNotified, notified }); } } } else { @@ -1372,12 +1376,14 @@ export class GitExtension implements IGitExtension { let result = false; for (const fileName of fileNames) { - const docWidget = this._docmanager.findWidget( - this.getRelativeFilePath(fileName) - ); + const filePath = this.getRelativeFilePath(fileName); + if (!filePath) { + continue; + } + const docWidget = this._docmanager?.findWidget(filePath); if (docWidget !== undefined) { - const context = this._docmanager.contextForWidget(docWidget); - if (context.model.dirty) { + const context = this._docmanager?.contextForWidget(docWidget); + if (context?.model.dirty) { result = true; break; } @@ -1407,13 +1413,13 @@ export class GitExtension implements IGitExtension { const reset_all = filename === undefined; let files: string[]; if (reset_all) { - files = (await this._changedFiles('INDEX', 'HEAD')).files; + files = (await this._changedFiles('INDEX', 'HEAD')).files ?? []; } else { - files = [filename]; + files = [filename!]; } await requestAPI(URLExt.join(path, 'reset'), 'POST', { - reset_all: filename === undefined, - filename: filename === undefined ? null : filename + reset_all, + filename: filename ?? null }); files.forEach(file => { @@ -1440,7 +1446,8 @@ export class GitExtension implements IGitExtension { async resetToCommit(hash = ''): Promise { const path = await this._getPathRepository(); await this._taskHandler.execute('git:reset:hard', async () => { - const files = (await this._changedFiles(null, null, hash)).files; + const files = (await this._changedFiles(undefined, undefined, hash)) + .files; await requestAPI(URLExt.join(path, 'reset_to_commit'), 'POST', { commit_id: hash @@ -1570,7 +1577,7 @@ export class GitExtension implements IGitExtension { path = await this._getPathRepository(); await this._taskHandler.execute('git:stash:drop', async () => { const url = - index >= 0 + (index ?? -1) >= 0 ? URLExt.join(path, `stash?stash_index=${index}`) : URLExt.join(path, 'stash'); await requestAPI(url, 'DELETE'); @@ -1601,7 +1608,7 @@ export class GitExtension implements IGitExtension { try { const path = await this._getPathRepository(); - const stashFiles = this._stash[index].files; + const stashFiles = (index ?? -1) >= 0 ? this._stash[index!].files : []; await this._taskHandler.execute('git:stash:pop', async () => { await requestAPI( @@ -1664,9 +1671,8 @@ export class GitExtension implements IGitExtension { for (const index in stashMsgList) { const stashInfo = stashMsgList[index].split(':'); - const branchName = stashInfo[1].match(/WIP on (.*)/) - ? stashInfo[1].match(/WIP on (.*)/)[1] - : stashInfo[1].split(' ')[2]; + const WIPMatch = stashInfo[1].match(/WIP on (.*)/); + const branchName = WIPMatch ? WIPMatch[1] : stashInfo[1].split(' ')[2]; const stashMsg = stashInfo[2].replace(/^\s+/, ''); @@ -1699,7 +1705,7 @@ export class GitExtension implements IGitExtension { stashList.forEach((stash, index) => { stash.files.push( - ...fileData.results[index].message.split('\n').slice(0, -1) + ...(fileData.results ?? [])[index].message.split('\n').slice(0, -1) ); }); @@ -1860,7 +1866,7 @@ export class GitExtension implements IGitExtension { * @param mark - mark to set */ addMark(fname: string, mark: boolean): void { - this._currentMarker.add(fname, mark); + this._currentMarker?.add(fname, mark); } /** @@ -1870,7 +1876,7 @@ export class GitExtension implements IGitExtension { * @param mark - mark to set */ setMark(fname: string, mark: boolean): void { - this._currentMarker.set(fname, mark); + this._currentMarker?.set(fname, mark); } /** @@ -1880,7 +1886,7 @@ export class GitExtension implements IGitExtension { * @returns mark */ getMark(fname: string): boolean { - return this._currentMarker.get(fname); + return this._currentMarker?.get(fname) ?? false; } /** @@ -1889,15 +1895,15 @@ export class GitExtension implements IGitExtension { * @param fname - filename */ toggleMark(fname: string): void { - this._currentMarker.toggle(fname); + this._currentMarker?.toggle(fname); } get markedFiles(): Git.IStatusFile[] { - return this._currentMarker.markedFilePaths - .filter(path => this.status.files.some(file => file.to === path)) - .map(path => - this.status.files.find(fileStatus => fileStatus.to === path) - ); + return this._currentMarker!.markedFilePaths.filter(path => + this.status.files.some(file => file.to === path) + ).map( + path => this.status.files.find(fileStatus => fileStatus.to === path)! + ); } /** @@ -1930,7 +1936,9 @@ export class GitExtension implements IGitExtension { async revertCommit(message: string, hash: string): Promise { const path = await this._getPathRepository(); await this._taskHandler.execute('git:commit:revert', async () => { - const files = (await this._changedFiles(null, null, hash + '^!')).files; + const files = ( + await this._changedFiles(undefined, undefined, hash + '^!') + ).files; await requestAPI(URLExt.join(path, 'delete_commit'), 'POST', { commit_id: hash @@ -1987,7 +1995,7 @@ export class GitExtension implements IGitExtension { singleCommit?: string ): Promise { return await requestAPI( - URLExt.join(this.pathRepository, 'changed_files'), + URLExt.join(this.pathRepository!, 'changed_files'), 'POST', { base: base, @@ -2036,7 +2044,7 @@ export class GitExtension implements IGitExtension { } return ( - this._docRegistry.getFileTypesForPath(path)[0] || + this._docRegistry?.getFileTypesForPath(path)[0] ?? DocumentRegistry.getDefaultTextFileType() ); } @@ -2126,10 +2134,9 @@ export class GitExtension implements IGitExtension { * then ensure the editor's content matches the file on disk */ private _openGitignore(): void { - if (this._docmanager) { - const widget = this._docmanager.openOrReveal( - this.getRelativeFilePath('.gitignore') - ); + const filePath = this.getRelativeFilePath('.gitignore'); + if (this._docmanager && filePath) { + const widget = this._docmanager.openOrReveal(filePath); if (widget && !widget.context.model.dirty) { widget.context.revert(); } @@ -2178,7 +2185,11 @@ export class GitExtension implements IGitExtension { * @param path path to the file to be reverted */ private _revertFile(path: string): void { - const widget = this._docmanager.findWidget(this.getRelativeFilePath(path)); + const filePath = this.getRelativeFilePath(path); + if (!filePath) { + return; + } + const widget = this._docmanager?.findWidget(filePath); if (widget && !widget.context.model.dirty) { widget.context.revert(); } @@ -2191,8 +2202,15 @@ export class GitExtension implements IGitExtension { this.__currentMarker = this._markerCache.get(path, branch); } - private _status: Git.IStatus; - private _stash: Git.IStash; + private _status: Git.IStatus = { + branch: null, + remote: null, + ahead: 0, + behind: 0, + state: Git.State.DEFAULT, + files: [] + }; + private _stash: Git.IStash = []; private _pathRepository: string | null = null; private _branches: Git.IBranch[] = []; private _tagsList: Git.ITag[] = []; @@ -2202,7 +2220,7 @@ export class GitExtension implements IGitExtension { private _fetchPoll: Poll; private _isDisposed = false; private _markerCache: Markers = new Markers(() => this._markChanged.emit()); - private __currentMarker: BranchMarker = null; + private __currentMarker: BranchMarker | null = null; private _readyPromise: Promise = Promise.resolve(); private _pendingReadyPromise = 0; private _settings: ISettingRegistry.ISettings | null; @@ -2235,7 +2253,7 @@ export class GitExtension implements IGitExtension { this ); private _statusChanged = new Signal(this); - private _notifyRemoteChanges = new Signal< + private _remoteChanged = new Signal< IGitExtension, Git.IRemoteChangedNotification | null >(this); diff --git a/src/style/ActionButtonStyle.ts b/src/style/ActionButtonStyle.ts index 4fdb179ff..87e729609 100644 --- a/src/style/ActionButtonStyle.ts +++ b/src/style/ActionButtonStyle.ts @@ -39,7 +39,7 @@ export const showButtonOnHover = (() => { $nest: {} }; const selector = `&:hover .${hiddenButtonStyle}`; - styled.$nest[selector] = { + styled.$nest![selector] = { display: 'block' }; return styled; diff --git a/src/style/FileItemStyle.ts b/src/style/FileItemStyle.ts index d697f5a76..70190df56 100644 --- a/src/style/FileItemStyle.ts +++ b/src/style/FileItemStyle.ts @@ -49,11 +49,11 @@ export const selectedFileStyle = style( } }; - styled.$nest[`& .${actionButtonStyle}:active`] = { + styled.$nest![`& .${actionButtonStyle}:active`] = { backgroundColor: 'var(--jp-brand-color1)' }; - styled.$nest[`& .${actionButtonStyle}:hover`] = { + styled.$nest![`& .${actionButtonStyle}:hover`] = { backgroundColor: 'var(--jp-brand-color1)' }; diff --git a/src/style/GitStageStyle.ts b/src/style/GitStageStyle.ts index 0472d0a29..2994dae3d 100644 --- a/src/style/GitStageStyle.ts +++ b/src/style/GitStageStyle.ts @@ -33,11 +33,11 @@ export const sectionFileContainerStyle = style( }; const focus = `&:focus-within .${sectionAreaStyle} .${hiddenButtonStyle}`; - styled.$nest[focus] = { + styled.$nest![focus] = { display: 'block' }; const hoverSelector = `&:hover .${sectionAreaStyle} .${hiddenButtonStyle}`; - styled.$nest[hoverSelector] = { + styled.$nest![hoverSelector] = { display: 'block' }; return styled; diff --git a/src/style/GitStashStyle.ts b/src/style/GitStashStyle.ts index d5fe5433a..de1d34151 100644 --- a/src/style/GitStashStyle.ts +++ b/src/style/GitStashStyle.ts @@ -6,7 +6,7 @@ export const stashContainerStyle = style( (() => { const styled: NestedCSSProperties = { $nest: {} }; - styled.$nest[`& > .${sectionAreaStyle}`] = { + styled.$nest![`& > .${sectionAreaStyle}`] = { margin: 0 }; return styled; diff --git a/src/taskhandler.ts b/src/taskhandler.ts index f45fd8018..90d825d99 100644 --- a/src/taskhandler.ts +++ b/src/taskhandler.ts @@ -98,8 +98,8 @@ export class TaskHandler implements IDisposable { this._taskList.removeNode(node); } else { // Walk the task list looking for a task with the provided identifier... - while (node.next) { - node = node.next; + while (node?.next) { + node = node?.next; if (node.value && node.value.id === taskID) { this._taskList.removeNode(node); break; diff --git a/src/tokens.ts b/src/tokens.ts index f662c0a2a..ee2a935d1 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -27,7 +27,7 @@ export interface IGitExtension extends IDisposable { /** * The current branch */ - currentBranch: Git.IBranch; + currentBranch: Git.IBranch | null; /** * A signal emitted when the branches of the Git repository changes. @@ -52,7 +52,10 @@ export interface IGitExtension extends IDisposable { /** * A signal emitted when the current Git repository changes. */ - readonly repositoryChanged: ISignal>; + readonly repositoryChanged: ISignal< + IGitExtension, + IChangedArgs + >; /** * Test whether the model is ready; @@ -118,7 +121,7 @@ export interface IGitExtension extends IDisposable { /** * A signal emitted when files that are behind the remote branch are opened. */ - readonly notifyRemoteChanges: ISignal< + readonly remoteChanged: ISignal< IGitExtension, Git.IRemoteChangedNotification | null >; @@ -384,7 +387,7 @@ export interface IGitExtension extends IDisposable { * * @param path the file path relative to the server root */ - getFile(path: string): Git.IStatusFile; + getFile(path: string): Git.IStatusFile | null; /** * Get current mark of file named fname diff --git a/src/utils.ts b/src/utils.ts index fa421600a..eec197bb7 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -18,10 +18,10 @@ export function extractFilename(path: string): string { * @returns Mouse event handler that stops event from propagating */ export function stopPropagationWrapper( - fn: React.EventHandler -): React.EventHandler { - return (event: React.MouseEvent) => { - event.stopPropagation(); + fn: (event?: React.MouseEvent) => void +): (event?: React.MouseEvent) => void { + return (event?: React.MouseEvent) => { + event?.stopPropagation(); fn(event); }; } @@ -99,9 +99,11 @@ export const openFileDiff = * * @param event - event object */ - async (event: React.MouseEvent): Promise => { + async ( + event?: React.MouseEvent + ): Promise => { // Prevent the commit component from being collapsed: - event.stopPropagation(); + event?.stopPropagation(); if (isText) { try { diff --git a/src/widgets/AdvancedPushForm.tsx b/src/widgets/AdvancedPushForm.tsx index aa5827f79..14fca3f32 100644 --- a/src/widgets/AdvancedPushForm.tsx +++ b/src/widgets/AdvancedPushForm.tsx @@ -110,14 +110,16 @@ export class AdvancedPushForm getValue(): IAdvancedPushFormValue { return { - remoteName: this._radioButtons.find(rb => rb.checked)?.value, + remoteName: this._radioButtons.find(rb => rb.checked)?.value ?? '', force: this._forceCheckbox.checked }; } private _trans: TranslationBundle; private _model: GitExtension; + // @ts-expect-error initialization is indirect private _remoteOptionsContainer: HTMLElement; private _radioButtons: HTMLInputElement[]; + // @ts-expect-error initialization is indirect private _forceCheckbox: HTMLInputElement; } diff --git a/src/widgets/AuthorBox.ts b/src/widgets/AuthorBox.ts index 92c5694fe..cd69dfb09 100644 --- a/src/widgets/AuthorBox.ts +++ b/src/widgets/AuthorBox.ts @@ -1,5 +1,5 @@ import { Dialog } from '@jupyterlab/apputils'; -import { TranslationBundle } from '@jupyterlab/translation'; +import { nullTranslator, TranslationBundle } from '@jupyterlab/translation'; import { Widget } from '@lumino/widgets'; import { Git } from '../tokens'; @@ -25,6 +25,7 @@ export class GitAuthorForm author: Git.IIdentity, trans?: TranslationBundle ): void { + trans ??= nullTranslator.load('jupyterlab_git'); const nameLabel = document.createElement('label'); nameLabel.textContent = trans.__('Committer name:'); const emailLabel = document.createElement('label'); @@ -54,6 +55,8 @@ export class GitAuthorForm return credentials; } + // @ts-expect-error initialization is indirect private _name: HTMLInputElement; + // @ts-expect-error initialization is indirect private _email: HTMLInputElement; } diff --git a/src/widgets/CredentialsBox.tsx b/src/widgets/CredentialsBox.tsx index 8a28d0fb2..54bad92cc 100755 --- a/src/widgets/CredentialsBox.tsx +++ b/src/widgets/CredentialsBox.tsx @@ -74,7 +74,10 @@ export class GitCredentialsForm }; } protected _trans: TranslationBundle; + // @ts-expect-error initialization is indirect private _user: HTMLInputElement; + // @ts-expect-error initialization is indirect private _password: HTMLInputElement; + // @ts-expect-error initialization is indirect private _checkboxCacheCredentials: HTMLInputElement; } diff --git a/src/widgets/GitResetToRemoteForm.tsx b/src/widgets/GitResetToRemoteForm.tsx index 90e71a291..02dd8ba36 100644 --- a/src/widgets/GitResetToRemoteForm.tsx +++ b/src/widgets/GitResetToRemoteForm.tsx @@ -45,5 +45,6 @@ export class CheckboxForm }; } + // @ts-expect-error initialization is indirect private _checkbox: HTMLInputElement; } diff --git a/src/widgets/gitClone.tsx b/src/widgets/gitClone.tsx index 9d3cd382a..475952981 100644 --- a/src/widgets/gitClone.tsx +++ b/src/widgets/gitClone.tsx @@ -28,9 +28,9 @@ export function addCloneButton( newValue: model.pathRepository }} > - {(_, change: IChangedArgs) => ( + {(_, change?: IChangedArgs) => ( { commands.execute(CommandIDs.gitClone); From ab55c1241b79304d3ce9d0d182c900e9c4dbf251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Tue, 19 Sep 2023 17:01:25 +0200 Subject: [PATCH 06/24] Build and lint --- README.md | 1 + package.json | 562 ++++++++++++++------------- src/commandsAndMenu.tsx | 23 +- src/components/diff/ImageDiff.tsx | 69 ++-- src/components/diff/NotebookDiff.ts | 31 +- src/components/diff/PlainTextDiff.ts | 169 +++----- src/index.ts | 24 +- src/model.ts | 18 +- src/tokens.ts | 35 +- tsconfig.json | 2 +- 10 files changed, 450 insertions(+), 484 deletions(-) diff --git a/README.md b/README.md index f45010773..7f1bc87ed 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ To see the extension in action, open the example notebook included in the Binder - Git (version `>=2.x`) For older versions of JupyterLab, go to: + - [3.x branch](https://github.com/jupyterlab/jupyterlab-git/tree/jlab-3) - [2.x branch](https://github.com/jupyterlab/jupyterlab-git/tree/jlab-2) diff --git a/package.json b/package.json index 9a1008315..61bf48b6f 100644 --- a/package.json +++ b/package.json @@ -1,288 +1,292 @@ { - "name": "@jupyterlab/git", - "version": "0.43.0", - "description": "A JupyterLab extension for version control using git", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "style": "style/index.css", - "license": "BSD-3-Clause", - "author": "Jupyter Development Team", - "keywords": [ - "Jupyter", - "JupyterLab", - "JupyterLab3", - "jupyterlab-extension", - "Git" - ], - "scripts": { - "build": "jlpm build:lib && jlpm build:labextension:dev", - "build:labextension": "jupyter labextension build .", - "build:labextension:dev": "jupyter labextension build --development True .", - "build:lib": "genversion --es6 --semi src/version.ts && tsc --sourceMap", - "build:lib:prod": "genversion --es6 --semi src/version.ts && tsc", - "build:prod": "jlpm clean && jlpm build:lib:prod && jlpm build:labextension", - "clean": "jlpm clean:lib", - "clean:all": "jlpm clean:lib && jlpm clean:labextension && jlpm clean:lintcache", - "clean:labextension": "rimraf jupyterlab_git/labextension jupyterlab_git/_version.py", - "clean:lib": "rimraf lib tsconfig.tsbuildinfo", - "clean:lintcache": "rimraf .eslintcache .stylelintcache", - "clean:more": "jlpm clean && rimraf build dist MANIFEST", - "clean:slate": "jlpm clean:more && jlpm clean:labextension && rimraf node_modules", - "contributors:generate": "jlpm run all-contributors generate", - "eslint": "jlpm eslint:check --fix", - "eslint:check": "eslint . --cache --ext .ts,.tsx", - "install:extension": "jlpm build", - "lint": "jlpm stylelint && jlpm prettier && jlpm eslint", - "lint:check": "jlpm stylelint:check && jlpm prettier:check && jlpm eslint:check", - "prepare": "genversion --es6 --semi src/version.ts", - "prettier": "jlpm prettier:base --write --list-different", - "prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.md}\"", - "prettier:check": "jlpm prettier:base --check", - "stylelint": "jlpm stylelint:check --fix", - "stylelint:check": "stylelint --cache \"style/**/*.css\"", - "test": "jest --coverage --no-cache", - "watch": "run-p watch:src watch:labextension", - "watch:labextension": "jupyter labextension watch .", - "watch:src": "tsc -w --sourceMap" - }, - "files": [ - "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "schema/**/*.{json,}", - "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}", - "style/index.js" - ], - "sideEffects": [ - "style/*.css", - "style/index.js" - ], - "styleModule": "style/index.js", - "dependencies": { - "@jupyterlab/application": "^4.0.6", - "@jupyterlab/apputils": "^4.1.6", - "@jupyterlab/codemirror": "^4.0.6", - "@jupyterlab/console": "^4.0.6", - "@jupyterlab/coreutils": "^6.0.6", - "@jupyterlab/docregistry": "^4.0.6", - "@jupyterlab/filebrowser": "^4.0.6", - "@jupyterlab/mainmenu": "^4.0.6", - "@jupyterlab/nbformat": "^4.0.6", - "@jupyterlab/rendermime": "^4.0.6", - "@jupyterlab/services": "^7.0.6", - "@jupyterlab/settingregistry": "^4.0.6", - "@jupyterlab/terminal": "^4.0.6", - "@jupyterlab/translation": "^4.0.6", - "@jupyterlab/ui-components": "^4.0.6", - "@lumino/collections": "^2.0.0", - "@lumino/commands": "^2.0.1", - "@lumino/coreutils": "^2.0.0", - "@lumino/disposable": "^2.0.0", - "@lumino/messaging": "^2.0.0", - "@lumino/polling": "^2.0.0", - "@lumino/signaling": "^2.0.0", - "@lumino/widgets": "^2.0.1", - "@mui/core": "^5.0.0-alpha.54", - "@mui/icons-material": "^5.11.16", - "@mui/lab": "^5.0.0-alpha.127", - "@mui/material": "^5.12.1", - "@mui/styles": "^5.12.0", - "diff-match-patch": "^1.0.4", - "filesize": "^10.0.7", - "nbdime": "^7.0.0-alpha.0", - "nbdime-jupyterlab": "^3.0.0-alpha.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-virtualized-auto-sizer": "^1.0.2", - "react-window": "^1.8.5", - "typestyle": "^2.0.1" - }, - "devDependencies": { - "@babel/core": "^7.0.0", - "@babel/preset-env": "^7.0.0", - "@jupyterlab/builder": "^4.0.0", - "@jupyterlab/testutils": "^4.0.0", - "@types/diff-match-patch": "^1.0.32", - "@types/enzyme": "^3.1.15", - "@types/jest": "^29.2.0", - "@types/json-schema": "^7.0.11", - "@types/react": "^18.0.26", - "@types/react-addons-linked-state-mixin": "^0.14.22", - "@types/react-dom": "^18.2.0", - "@types/react-virtualized-auto-sizer": "^1.0.0", - "@types/react-window": "^1.8.2", - "@types/resize-observer-browser": "^0.1.7", - "@typescript-eslint/eslint-plugin": "^6.1.0", - "@typescript-eslint/parser": "^6.1.0", - "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", - "all-contributors-cli": "^6.14.0", - "css-loader": "^6.7.1", - "enzyme": "^3.7.0", - "eslint": "^8.36.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-prettier": "^5.0.0", - "eslint-plugin-react": "^7.33.0", - "genversion": "^2.2.1", - "husky": "^8.0.3", - "identity-obj-proxy": "^3.0.0", - "jest": "^29.2.0", - "jest-fetch-mock": "^3.0.0", - "lint-staged": "^13.2.3", - "mkdirp": "^1.0.3", - "npm-run-all": "^4.1.5", - "prettier": "^3.0.0", - "rimraf": "^5.0.1", - "source-map-loader": "^1.0.2", - "style-loader": "^3.3.1", - "stylelint": "^15.10.1", - "stylelint-config-recommended": "^13.0.0", - "stylelint-config-standard": "^34.0.0", - "stylelint-csstree-validator": "^3.0.0", - "stylelint-prettier": "^4.0.0", - "ts-jest": "^26.0.0", - "typescript": "~5.0.2", - "yjs": "^13.5.40" - }, - "directories": { - "lib": "lib" - }, - "lint-staged": { - "*.{ts,tsx}": [ - "eslint . --ext .ts,.tsx --fix" - ] - }, - "repository": { - "type": "git", - "url": "https://github.com/jupyterlab/jupyterlab-git.git" - }, - "bugs": { - "url": "https://github.com/jupyterlab/jupyterlab-git/issues" - }, - "homepage": "https://github.com/jupyterlab/jupyterlab-git", - "jupyterlab": { - "discovery": { - "server": { - "managers": [ - "pip", - "conda" + "name": "@jupyterlab/git", + "version": "0.43.0", + "description": "A JupyterLab extension for version control using git", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "style": "style/index.css", + "license": "BSD-3-Clause", + "author": "Jupyter Development Team", + "keywords": [ + "Jupyter", + "JupyterLab", + "JupyterLab3", + "jupyterlab-extension", + "Git" + ], + "scripts": { + "build": "jlpm build:lib && jlpm build:labextension:dev", + "build:labextension": "jupyter labextension build .", + "build:labextension:dev": "jupyter labextension build --development True .", + "build:lib": "genversion --es6 --semi src/version.ts && tsc --sourceMap", + "build:lib:prod": "genversion --es6 --semi src/version.ts && tsc", + "build:prod": "jlpm clean && jlpm build:lib:prod && jlpm build:labextension", + "clean": "jlpm clean:lib", + "clean:all": "jlpm clean:lib && jlpm clean:labextension && jlpm clean:lintcache", + "clean:labextension": "rimraf jupyterlab_git/labextension jupyterlab_git/_version.py", + "clean:lib": "rimraf lib tsconfig.tsbuildinfo", + "clean:lintcache": "rimraf .eslintcache .stylelintcache", + "clean:more": "jlpm clean && rimraf build dist MANIFEST", + "clean:slate": "jlpm clean:more && jlpm clean:labextension && rimraf node_modules", + "contributors:generate": "jlpm run all-contributors generate", + "eslint": "jlpm eslint:check --fix", + "eslint:check": "eslint . --cache --ext .ts,.tsx", + "install:extension": "jlpm build", + "lint": "jlpm stylelint && jlpm prettier && jlpm eslint", + "lint:check": "jlpm stylelint:check && jlpm prettier:check && jlpm eslint:check", + "prepare": "genversion --es6 --semi src/version.ts", + "prettier": "jlpm prettier:base --write --list-different", + "prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.md}\"", + "prettier:check": "jlpm prettier:base --check", + "stylelint": "jlpm stylelint:check --fix", + "stylelint:check": "stylelint --cache \"style/**/*.css\"", + "test": "jest --coverage --no-cache", + "watch": "run-p watch:src watch:labextension", + "watch:labextension": "jupyter labextension watch .", + "watch:src": "tsc -w --sourceMap" + }, + "files": [ + "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", + "schema/**/*.{json,}", + "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "style/index.js" + ], + "sideEffects": [ + "style/*.css", + "style/index.js" + ], + "styleModule": "style/index.js", + "dependencies": { + "@emotion/react": "^11.10.6", + "@emotion/styled": "^11.10.6", + "@jupyterlab/application": "^4.0.6", + "@jupyterlab/apputils": "^4.1.6", + "@jupyterlab/codeeditor": "^4.0.6", + "@jupyterlab/codemirror": "^4.0.6", + "@jupyterlab/console": "^4.0.6", + "@jupyterlab/coreutils": "^6.0.6", + "@jupyterlab/docregistry": "^4.0.6", + "@jupyterlab/filebrowser": "^4.0.6", + "@jupyterlab/mainmenu": "^4.0.6", + "@jupyterlab/nbformat": "^4.0.6", + "@jupyterlab/rendermime": "^4.0.6", + "@jupyterlab/services": "^7.0.6", + "@jupyterlab/settingregistry": "^4.0.6", + "@jupyterlab/terminal": "^4.0.6", + "@jupyterlab/translation": "^4.0.6", + "@jupyterlab/ui-components": "^4.0.6", + "@lumino/collections": "^2.0.0", + "@lumino/commands": "^2.0.1", + "@lumino/coreutils": "^2.0.0", + "@lumino/disposable": "^2.0.0", + "@lumino/messaging": "^2.0.0", + "@lumino/polling": "^2.0.0", + "@lumino/signaling": "^2.0.0", + "@lumino/widgets": "^2.0.1", + "@mui/core": "^5.0.0-alpha.54", + "@mui/icons-material": "^5.11.16", + "@mui/lab": "^5.0.0-alpha.127", + "@mui/material": "^5.12.1", + "@mui/styles": "^5.12.0", + "diff-match-patch": "^1.0.4", + "filesize": "^10.0.7", + "nbdime": "^7.0.0-alpha.0", + "nbdime-jupyterlab": "^3.0.0-alpha.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-virtualized-auto-sizer": "^1.0.2", + "react-window": "^1.8.5", + "typestyle": "^2.0.1" + }, + "devDependencies": { + "@babel/core": "^7.0.0", + "@babel/preset-env": "^7.0.0", + "@jupyterlab/builder": "^4.0.0", + "@jupyterlab/testutils": "^4.0.0", + "@types/diff-match-patch": "^1.0.32", + "@types/enzyme": "^3.1.15", + "@types/jest": "^29.2.0", + "@types/json-schema": "^7.0.11", + "@types/react": "^18.0.26", + "@types/react-addons-linked-state-mixin": "^0.14.22", + "@types/react-dom": "^18.2.0", + "@types/react-virtualized-auto-sizer": "^1.0.0", + "@types/react-window": "^1.8.2", + "@types/resize-observer-browser": "^0.1.7", + "@typescript-eslint/eslint-plugin": "^6.1.0", + "@typescript-eslint/parser": "^6.1.0", + "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", + "all-contributors-cli": "^6.14.0", + "css-loader": "^6.7.1", + "enzyme": "^3.7.0", + "eslint": "^8.36.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-react": "^7.33.0", + "genversion": "^2.2.1", + "husky": "^8.0.3", + "identity-obj-proxy": "^3.0.0", + "jest": "^29.2.0", + "jest-fetch-mock": "^3.0.0", + "lint-staged": "^13.2.3", + "mkdirp": "^1.0.3", + "npm-run-all": "^4.1.5", + "prettier": "^3.0.0", + "rimraf": "^5.0.1", + "source-map-loader": "^1.0.2", + "style-loader": "^3.3.1", + "stylelint": "^15.10.1", + "stylelint-config-recommended": "^13.0.0", + "stylelint-config-standard": "^34.0.0", + "stylelint-csstree-validator": "^3.0.0", + "stylelint-prettier": "^4.0.0", + "ts-jest": "^26.0.0", + "typescript": "~5.0.2", + "yjs": "^13.5.40" + }, + "directories": { + "lib": "lib" + }, + "lint-staged": { + "*.{ts,tsx}": [ + "eslint . --ext .ts,.tsx --fix" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/jupyterlab/jupyterlab-git.git" + }, + "bugs": { + "url": "https://github.com/jupyterlab/jupyterlab-git/issues" + }, + "homepage": "https://github.com/jupyterlab/jupyterlab-git", + "jupyterlab": { + "discovery": { + "server": { + "managers": [ + "pip", + "conda" + ], + "base": { + "name": "jupyterlab-git" + } + } + }, + "extension": true, + "schemaDir": "schema", + "sharedPackages": { + "@material-ui/core": { + "singleton": true + }, + "@material-ui/icons": { + "singleton": true + }, + "@material-ui/lab": { + "singleton": true + }, + "nbdime": { + "bundled": false, + "singleton": true + }, + "nbdime-jupyterlab": { + "bundled": false, + "singleton": true + } + }, + "outputDir": "jupyterlab_git/labextension" + }, + "eslintConfig": { + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended" ], - "base": { - "name": "jupyterlab-git" + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "tsconfig.json", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "interface", + "format": [ + "PascalCase" + ], + "custom": { + "regex": "^I[A-Z]", + "match": true + } + } + ], + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "args": "none" + } + ], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/quotes": [ + "error", + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": false + } + ], + "curly": [ + "error", + "all" + ], + "eqeqeq": "error", + "prefer-arrow-callback": "error" } - } - }, - "extension": true, - "schemaDir": "schema", - "sharedPackages": { - "@material-ui/core": { - "singleton": true - }, - "@material-ui/icons": { - "singleton": true - }, - "@material-ui/lab": { - "singleton": true - }, - "nbdime": { - "bundled": false, - "singleton": true - }, - "nbdime-jupyterlab": { - "bundled": false, - "singleton": true - } }, - "outputDir": "jupyterlab_git/labextension" - }, - "eslintConfig": { - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended" + "eslintIgnore": [ + "node_modules", + "dist", + "coverage", + "**/*.d.ts", + "tests", + "**/__tests__", + "ui-tests" ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "tsconfig.json", - "sourceType": "module" + "prettier": { + "singleQuote": true, + "trailingComma": "none", + "arrowParens": "avoid", + "endOfLine": "auto", + "overrides": [ + { + "files": "package.json", + "options": { + "tabWidth": 4 + } + } + ] }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": "interface", - "format": [ - "PascalCase" - ], - "custom": { - "regex": "^I[A-Z]", - "match": true - } - } - ], - "@typescript-eslint/no-unused-vars": [ - "warn", - { - "args": "none" - } - ], - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/quotes": [ - "error", - "single", - { - "avoidEscape": true, - "allowTemplateLiterals": false - } - ], - "curly": [ - "error", - "all" - ], - "eqeqeq": "error", - "prefer-arrow-callback": "error" - } - }, - "eslintIgnore": [ - "node_modules", - "dist", - "coverage", - "**/*.d.ts", - "tests", - "**/__tests__", - "ui-tests" - ], - "prettier": { - "singleQuote": true, - "trailingComma": "none", - "arrowParens": "avoid", - "endOfLine": "auto", - "overrides": [ - { - "files": "package.json", - "options": { - "tabWidth": 4 + "stylelint": { + "extends": [ + "stylelint-config-recommended", + "stylelint-config-standard", + "stylelint-prettier/recommended" + ], + "plugins": [ + "stylelint-csstree-validator" + ], + "rules": { + "csstree/validator": true, + "property-no-vendor-prefix": null, + "selector-class-pattern": null, + "selector-no-vendor-prefix": null, + "value-no-vendor-prefix": null } - } - ] - }, - "stylelint": { - "extends": [ - "stylelint-config-recommended", - "stylelint-config-standard", - "stylelint-prettier/recommended" - ], - "plugins": [ - "stylelint-csstree-validator" - ], - "rules": { - "csstree/validator": true, - "property-no-vendor-prefix": null, - "selector-no-vendor-prefix": null, - "value-no-vendor-prefix": null } - } } diff --git a/src/commandsAndMenu.tsx b/src/commandsAndMenu.tsx index 1738222f9..e5ecc8d4a 100644 --- a/src/commandsAndMenu.tsx +++ b/src/commandsAndMenu.tsx @@ -5,17 +5,21 @@ import { MainAreaWidget, ReactWidget, showDialog, - showErrorMessage, - Toolbar, - ToolbarButton + showErrorMessage } from '@jupyterlab/apputils'; +import { CodeEditor } from '@jupyterlab/codeeditor'; import { PathExt, URLExt } from '@jupyterlab/coreutils'; import { FileBrowser, FileBrowserModel } from '@jupyterlab/filebrowser'; import { Contents } from '@jupyterlab/services'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { ITerminal } from '@jupyterlab/terminal'; import { ITranslator, TranslationBundle } from '@jupyterlab/translation'; -import { closeIcon, ContextMenuSvg } from '@jupyterlab/ui-components'; +import { + closeIcon, + ContextMenuSvg, + Toolbar, + ToolbarButton +} from '@jupyterlab/ui-components'; import { ArrayExt } from '@lumino/algorithm'; import { CommandRegistry } from '@lumino/commands'; import { PromiseDelegate } from '@lumino/coreutils'; @@ -126,6 +130,7 @@ function pluralizedContextLabel(singular: string, plural: string) { export function addCommands( app: JupyterFrontEnd, gitModel: GitExtension, + editorFactory: CodeEditor.Factory, fileBrowserModel: FileBrowserModel, settings: ISettingRegistry.ISettings, translator: ITranslator @@ -548,7 +553,9 @@ export function addCommands( ); const buildDiffWidget = - getDiffProvider(fullPath) ?? (isText && createPlainTextDiff); + getDiffProvider(fullPath) ?? + (isText && + (options => createPlainTextDiff({ ...options, editorFactory }))); if (buildDiffWidget) { const id = `git-diff-${fullPath}-${model.reference.label}-${model.challenger.label}`; @@ -598,11 +605,11 @@ export function addCommands( // Create the diff widget try { - const widget = await buildDiffWidget( + const widget = await buildDiffWidget({ model, - diffWidget.toolbar, + toolbar: diffWidget.toolbar, translator - ); + }); diffWidget.toolbar.addItem('spacer', Toolbar.createSpacerItem()); diff --git a/src/components/diff/ImageDiff.tsx b/src/components/diff/ImageDiff.tsx index df7067a67..c4e38666a 100644 --- a/src/components/diff/ImageDiff.tsx +++ b/src/components/diff/ImageDiff.tsx @@ -1,32 +1,26 @@ +import { ReactWidget } from '@jupyterlab/apputils'; import { Contents } from '@jupyterlab/services'; +import { nullTranslator, TranslationBundle } from '@jupyterlab/translation'; import { PromiseDelegate } from '@lumino/coreutils'; import { Panel } from '@lumino/widgets'; -import { ReactWidget } from '@jupyterlab/apputils'; - +import Slider, { SliderProps } from '@mui/material/Slider'; +import { styled } from '@mui/material/styles'; +import Tab from '@mui/material/Tab'; +import Tabs from '@mui/material/Tabs'; +import { filesize } from 'filesize'; import * as React from 'react'; import { - useState, useCallback, - useRef, + useEffect, useLayoutEffect, - useEffect + useRef, + useState } from 'react'; -import Slider from '@mui/material/Slider'; -import { styled } from '@mui/material/styles'; -import Tabs from '@mui/material/Tabs'; -import Tab from '@mui/material/Tab'; - -import { Git } from '../../tokens'; -import { - ITranslator, - nullTranslator, - TranslationBundle -} from '@jupyterlab/translation'; -import { Toolbar } from '@jupyterlab/apputils'; - import { challengerImageClass, challengerLabelClass, + emptyChallImage, + emptyRefImage, imageCol, imageDiffWidgetClass, labelsClass, @@ -37,28 +31,26 @@ import { onionSkinReferenceImage, referenceImageClass, referenceLabelClass, + slider, sliderChallengerCircle, sliderReferenceCircle, swipeBackground, swipeChallengerImage, swipeContainer, + swipeImage, swipeReferenceImage, - slider, tabClass, tabIndicatorClass, tabsClass, - twoUpView, - swipeImage, - emptyRefImage, - emptyChallImage + twoUpView } from '../../style/ImageDiffStyle'; -import { filesize } from 'filesize'; +import { Git } from '../../tokens'; -export const createImageDiff: Git.Diff.ICallback = async ( - model: Git.Diff.IModel, - toolbar?: Toolbar, - translator?: ITranslator -): Promise => { +export const createImageDiff: Git.Diff.Factory = async ({ + model, + toolbar, + translator +}): Promise => { const widget = new ImageDiffWidget( model, (translator ?? nullTranslator).load('jupyterlab_git') @@ -270,12 +262,7 @@ const TwoUp = ({ reference, challenger, fileType }: ImageDiffViewProps) => { ); }; -type SliderProps = { - value: number; - onChange: ( - event: React.ChangeEvent, - newValue: number | number[] - ) => void; +type SliderProps_ = Pick & { width: number; reversed?: boolean; }; @@ -287,7 +274,7 @@ const CustomMUISlider = styled(Slider)({ } }); -const Slider_ = ({ value, onChange, width, reversed }: SliderProps) => { +const Slider_ = ({ value, onChange, width, reversed }: SliderProps_) => { const circleClasses = reversed ? [sliderChallengerCircle, sliderReferenceCircle] : [sliderReferenceCircle, sliderChallengerCircle]; @@ -312,10 +299,7 @@ const Swipe = ({ reference, challenger, fileType }: ImageDiffViewProps) => { const referenceImageRef = useRef(null); const challengerImageRef = useRef(null); - const handleSliderChange = ( - event: React.ChangeEvent, - newValue: number | number[] - ) => { + const handleSliderChange = (event: Event, newValue: number | number[]) => { if (typeof newValue === 'number') { setSliderValue(newValue); } @@ -377,10 +361,7 @@ const OnionSkin = ({ reference, challenger, fileType }: ImageDiffViewProps) => { const referenceImageRef = useRef(null); const challengerImageRef = useRef(null); - const handleSliderChange = ( - event: React.ChangeEvent, - newValue: number | number[] - ) => { + const handleSliderChange = (event: Event, newValue: number | number[]) => { if (typeof newValue === 'number') { setSliderValue(newValue); } diff --git a/src/components/diff/NotebookDiff.ts b/src/components/diff/NotebookDiff.ts index 71e0d5ac4..9566afb1f 100644 --- a/src/components/diff/NotebookDiff.ts +++ b/src/components/diff/NotebookDiff.ts @@ -5,31 +5,26 @@ /* eslint-disable no-inner-declarations */ -import { Toolbar } from '@jupyterlab/apputils'; -import { Contents } from '@jupyterlab/services'; import { INotebookContent } from '@jupyterlab/nbformat'; import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; +import { Contents } from '@jupyterlab/services'; +import { nullTranslator, TranslationBundle } from '@jupyterlab/translation'; import { PromiseDelegate } from '@lumino/coreutils'; import { Message } from '@lumino/messaging'; import { Panel, Widget } from '@lumino/widgets'; import { IDiffEntry } from 'nbdime/lib/diff/diffentries'; -import { IMergeDecision } from 'nbdime/lib/merge/decisions'; -import { NotebookMergeModel } from 'nbdime/lib/merge/model'; -import { CELLMERGE_CLASS, NotebookMergeWidget } from 'nbdime/lib/merge/widget'; -import { UNCHANGED_MERGE_CLASS } from 'nbdime/lib/merge/widget/common'; import { NotebookDiffModel } from 'nbdime/lib/diff/model'; import { CELLDIFF_CLASS, NotebookDiffWidget } from 'nbdime/lib/diff/widget'; import { CHUNK_PANEL_CLASS, UNCHANGED_DIFF_CLASS } from 'nbdime/lib/diff/widget/common'; +import { IMergeDecision } from 'nbdime/lib/merge/decisions'; +import { NotebookMergeModel } from 'nbdime/lib/merge/model'; +import { CELLMERGE_CLASS, NotebookMergeWidget } from 'nbdime/lib/merge/widget'; +import { UNCHANGED_MERGE_CLASS } from 'nbdime/lib/merge/widget/common'; import { requestAPI } from '../../git'; import { Git } from '../../tokens'; -import { - ITranslator, - nullTranslator, - TranslationBundle -} from '@jupyterlab/translation'; /** * Class of the outermost widget, the draggable tab @@ -79,12 +74,14 @@ interface INbdimeMergeDiff { * @param toolbar MainAreaWidget toolbar * @returns Diff notebook widget */ -export const createNotebookDiff = async ( - model: Git.Diff.IModel, - renderMime: IRenderMimeRegistry, - toolbar?: Toolbar, - translator?: ITranslator -): Promise => { +export const createNotebookDiff = async ({ + model, + renderMime, + toolbar, + translator +}: Git.Diff.IFactoryOptions & { + renderMime: IRenderMimeRegistry; +}): Promise => { // Create the notebook diff view const trans = (translator ?? nullTranslator).load('jupyterlab_git'); const diffWidget = new NotebookDiff(model, renderMime, trans); diff --git a/src/components/diff/PlainTextDiff.ts b/src/components/diff/PlainTextDiff.ts index 1098e955c..8bf626828 100644 --- a/src/components/diff/PlainTextDiff.ts +++ b/src/components/diff/PlainTextDiff.ts @@ -1,13 +1,15 @@ -import { Toolbar } from '@jupyterlab/apputils'; -import { EditorLanguageRegistry } from '@jupyterlab/codemirror'; -import { Contents } from '@jupyterlab/services'; +import { CodeEditor } from '@jupyterlab/codeeditor'; import { - ITranslator, - nullTranslator, - TranslationBundle -} from '@jupyterlab/translation'; + CodeMirrorEditorFactory, + EditorExtensionRegistry, + EditorLanguageRegistry +} from '@jupyterlab/codemirror'; +import { Contents } from '@jupyterlab/services'; +import { nullTranslator, TranslationBundle } from '@jupyterlab/translation'; import { PromiseDelegate } from '@lumino/coreutils'; import { Widget } from '@lumino/widgets'; +import { createNbdimeMergeView, MergeView } from 'nbdime/lib/common/mergeview'; +import { StringDiffModel } from 'nbdime/lib/diff/model'; import { Git } from '../../tokens'; /** @@ -17,15 +19,19 @@ import { Git } from '../../tokens'; * @param toolbar MainAreaWidget toolbar * @returns PlainText diff widget */ -export const createPlainTextDiff: Git.Diff.ICallback = async ( - model: Git.Diff.IModel, - toolbar?: Toolbar, - translator?: ITranslator -): Promise => { - const widget = new PlainTextDiff( +export const createPlainTextDiff = async ({ + editorFactory, + model, + toolbar, + translator +}: Git.Diff.IFactoryOptions & { + editorFactory?: CodeEditor.Factory; +}): Promise => { + const widget = new PlainTextDiff({ model, - (translator ?? nullTranslator).load('jupyterlab_git') - ); + editorFactory, + trans: (translator ?? nullTranslator).load('jupyterlab_git') + }); await widget.ready; return widget; }; @@ -34,7 +40,15 @@ export const createPlainTextDiff: Git.Diff.ICallback = async ( * Plain Text Diff widget */ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { - constructor(model: Git.Diff.IModel, translator?: TranslationBundle) { + constructor({ + model, + trans, + editorFactory + }: { + model: Git.Diff.IModel; + editorFactory?: CodeEditor.Factory; + trans?: TranslationBundle; + }) { super({ node: PlainTextDiff.createNode( model.reference.label, @@ -45,47 +59,9 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { const getReady = new PromiseDelegate(); this._isReady = getReady.promise; this._container = this.node.lastElementChild as HTMLElement; + this._editorFactory = editorFactory ?? createEditorFactory(); this._model = model; - this._trans = translator ?? nullTranslator.load('jupyterlab_git'); - - // The list of internal strings is available at https://codemirror.net/examples/translate/ - this._translations = { - // @codemirror/view - 'Control character': this._trans.__('Control character'), - // @codemirror/commands - 'Selection deleted': this._trans.__('Selection deleted'), - // @codemirror/language - 'Folded lines': this._trans.__('Folded lines'), - 'Unfolded lines': this._trans.__('Unfolded lines'), - to: this._trans.__('to'), - 'folded code': this._trans.__('folded code'), - unfold: this._trans.__('unfold'), - 'Fold line': this._trans.__('Fold line'), - 'Unfold line': this._trans.__('Unfold line'), - // @codemirror/search - 'Go to line': this._trans.__('Go to line'), - go: this._trans.__('go'), - Find: this._trans.__('Find'), - Replace: this._trans.__('Replace'), - next: this._trans.__('next'), - previous: this._trans.__('previous'), - all: this._trans.__('all'), - 'match case': this._trans.__('match case'), - replace: this._trans.__('replace'), - 'replace all': this._trans.__('replace all'), - close: this._trans.__('close'), - 'current match': this._trans.__('current match'), - 'replaced $ matches': this._trans.__('replaced $ matches'), - 'replaced match on line $': this._trans.__('replaced match on line $'), - 'on line': this._trans.__('on line'), - // From https://codemirror.net/5/addon/merge/merge.js - 'Identical text collapsed. Click to expand.': this._trans.__( - 'Identical text collapsed. Click to expand.' - ), - 'Toggle locked scrolling': this._trans.__('Toggle locked scrolling'), - 'Push to left': this._trans.__('Push to left'), - 'Revert chunk': this._trans.__('Revert chunk') - }; + this._trans = trans ?? nullTranslator.load('jupyterlab_git'); // Load file content early Promise.all([ @@ -110,7 +86,7 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { * Helper to determine if three-way diff should be shown. */ private get _hasConflict(): boolean { - return this._model.hasConflict; + return this._model.hasConflict ?? false; } /** @@ -139,7 +115,7 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { * and rejects if unable to retrieve. */ getResolvedFile(): Promise> { - const value = this._mergeView?.editor().getValue() ?? null; + const value = this._mergeView?.getMergedValue() ?? null; if (value !== null) { return Promise.resolve({ type: 'file', @@ -164,7 +140,6 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { this.createDiffView( this._challenger, this._reference, - this._translations, this._languageRegistry, this._hasConflict ? this._base : null ); @@ -192,7 +167,7 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { try { // Clear all this._container.innerHTML = ''; - this._mergeView = null; + this._mergeView.dispose(); // ENH request content only if it changed if (this._reference !== null) { @@ -206,9 +181,8 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { } this.createDiffView( - this._challenger, - this._reference, - this._translations, + this._challenger!, + this._reference!, this._languageRegistry, this._hasConflict ? this._base : null ); @@ -249,40 +223,21 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { protected async createDiffView( challengerContent: string, referenceContent: string, - translations: Record, - languageRegistry: EditorLanguageRegistry, - baseContent?: string + languageRegistry: EditorLanguageRegistry | null = null, + baseContent: string | null = null ): Promise { if (!this._mergeView) { - const mode = - languageRegistry.findByFileName(this._model.filename) || - languageRegistry.findBest(this._model.filename); - - let options: LocalMergeView.IMergeViewEditorConfiguration = { - value: challengerContent, - orig: referenceContent, - mode: mode.mime, - phrases: translations, - ...this.getDefaultOptions() - }; - - // Show three-way diff on merge conflict - // Note: Empty base content ("") is an edge case. - if (baseContent !== null && baseContent !== undefined) { - options = { - ...options, - origLeft: referenceContent, - value: baseContent, - origRight: challengerContent, - readOnly: false, - revertButtons: true - }; - } + const remote = new StringDiffModel( + referenceContent, + challengerContent, + [], + [] + ); - this._mergeView = mergeView( - this._container, - options - ) as MergeView.MergeViewEditor; + this._mergeView = createNbdimeMergeView({ + remote, + factory: this._editorFactory + }); } return Promise.resolve(); @@ -306,27 +261,25 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget {

    `; } - protected getDefaultOptions(): Partial { - // FIXME add options from settings and connect settings to update options - return { - lineNumbers: true, - theme: 'jupyter', - connect: 'align', - collapseIdentical: true, - readOnly: true, - revertButtons: false - }; - } - protected _container: HTMLElement; + protected _editorFactory: CodeEditor.Factory; protected _isReady: Promise; - protected _mergeView: MergeView.MergeViewEditor; + // @ts-expect-error complex initialization + protected _mergeView: MergeView; protected _model: Git.Diff.IModel; protected _trans: TranslationBundle; - protected _translations: Record; private _reference: string | null = null; private _challenger: string | null = null; private _languageRegistry: EditorLanguageRegistry | null = null; private _base: string | null = null; } + +function createEditorFactory(): CodeEditor.Factory { + const factory = new CodeMirrorEditorFactory({ + extensions: new EditorExtensionRegistry(), + languages: new EditorLanguageRegistry() + }); + + return factory.newInlineEditor.bind(factory); +} diff --git a/src/index.ts b/src/index.ts index 6a953fe7f..3cc1dac14 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,9 +6,9 @@ import { import { Dialog, ICommandPalette, - showErrorMessage, - Toolbar + showErrorMessage } from '@jupyterlab/apputils'; +import { IEditorServices } from '@jupyterlab/codeeditor'; import { IChangedArgs } from '@jupyterlab/coreutils'; import { IDocumentManager } from '@jupyterlab/docmanager'; import { FileBrowserModel, IFileBrowserFactory } from '@jupyterlab/filebrowser'; @@ -46,6 +46,7 @@ const plugin: JupyterFrontEndPlugin = { id: '@jupyterlab/git:plugin', requires: [ ILayoutRestorer, + IEditorServices, IFileBrowserFactory, IRenderMimeRegistry, ISettingRegistry, @@ -68,6 +69,7 @@ export default [plugin, gitCloneCommandPlugin]; async function activate( app: JupyterFrontEnd, restorer: ILayoutRestorer, + editorServices: IEditorServices, factory: IFileBrowserFactory, renderMime: IRenderMimeRegistry, settingRegistry: ISettingRegistry, @@ -176,7 +178,16 @@ async function activate( // Provided we were able to load application settings, create the extension widgets if (settings) { // Add JupyterLab commands - addCommands(app, gitExtension, fileBrowser.model, settings, translator); + addCommands( + app, + gitExtension, + editorServices.factoryService.newInlineEditor.bind( + editorServices.factoryService + ), + fileBrowser.model, + settings, + translator + ); // Create the Git widget sidebar const gitPlugin = new GitWidget( @@ -245,15 +256,14 @@ async function activate( gitExtension.registerDiffProvider( 'Nbdime', ['.ipynb'], - (model: Git.Diff.IModel, toolbar?: Toolbar, translator?: ITranslator) => - createNotebookDiff(model, renderMime, toolbar, translator) + (options: Git.Diff.IFactoryOptions) => + createNotebookDiff({ ...options, renderMime }) ); gitExtension.registerDiffProvider( 'ImageDiff', ['.jpeg', '.jpg', '.png'], - (model: Git.Diff.IModel, toolbar?: Toolbar, translator?: ITranslator) => - createImageDiff(model, toolbar, translator) + createImageDiff ); return gitExtension; diff --git a/src/model.ts b/src/model.ts index faac2a7d6..c694fc3e4 100644 --- a/src/model.ts +++ b/src/model.ts @@ -14,7 +14,7 @@ import { decodeStage } from './utils'; const DEFAULT_REFRESH_INTERVAL = 3000; // ms // Available diff providers const DIFF_PROVIDERS: { - [key: string]: { name: string; callback: Git.Diff.ICallback }; + [key: string]: { name: string; factory: Git.Diff.Factory }; } = {}; /** @@ -24,9 +24,9 @@ const DIFF_PROVIDERS: { */ export function getDiffProvider( filename: string -): Git.Diff.ICallback | undefined { +): Git.Diff.Factory | undefined { return DIFF_PROVIDERS[PathExt.extname(filename)?.toLocaleLowerCase() ?? ''] - ?.callback; + ?.factory; } /** @@ -1907,18 +1907,18 @@ export class GitExtension implements IGitExtension { } /** - * Register a new diff provider for specified file types + * Register a new diff provider for specified file extensions * - * @param fileExtensions File type list - * @param callback Callback to use for the provided file types + * @param fileExtensions File extension list + * @param factory Callback to use for the provided file extensions */ registerDiffProvider( name: string, fileExtensions: string[], - callback: Git.Diff.ICallback + factory: Git.Diff.Factory ): void { - fileExtensions.forEach(fileExtension => { - DIFF_PROVIDERS[fileExtension.toLocaleLowerCase()] = { name, callback }; + fileExtensions.forEach(extension => { + DIFF_PROVIDERS[extension] = { name, factory }; }); } diff --git a/src/tokens.ts b/src/tokens.ts index ee2a935d1..c4926333e 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -1,8 +1,8 @@ -import { Toolbar } from '@jupyterlab/apputils'; import { IChangedArgs } from '@jupyterlab/coreutils'; import { DocumentRegistry } from '@jupyterlab/docregistry'; import { Contents, ServerConnection } from '@jupyterlab/services'; import { ITranslator } from '@jupyterlab/translation'; +import { Toolbar } from '@jupyterlab/ui-components'; import { JSONObject, ReadonlyJSONObject, Token } from '@lumino/coreutils'; import { IDisposable } from '@lumino/disposable'; import { ISignal } from '@lumino/signaling'; @@ -567,16 +567,15 @@ export interface IGitExtension extends IDisposable { checkRemoteChangeNotified(): Promise; /** - * Register a new diff provider for specified file types + * Register a new diff provider for specified file extensions * - * @param name provider name - * @param fileExtensions File extensions list - * @param callback Callback to use for the provided file types + * @param fileExtensions File extension list + * @param factory Callback to use for the provided file extensions */ registerDiffProvider( name: string, fileExtensions: string[], - callback: Git.Diff.ICallback + factory: Git.Diff.Factory ): void; /** @@ -702,17 +701,31 @@ export namespace Git { refresh(): Promise; } + /** + * Diff widget factory options + */ + export interface IFactoryOptions { + /** + * Diff model + */ + model: IModel; + /** + * Diff widget toolbar + */ + toolbar?: Toolbar; + /** + * Application translator object + */ + translator?: ITranslator; + } + /** * Callback to generate a comparison widget * * The toolbar is the one of the MainAreaWidget in which the diff widget * will be displayed. */ - export type ICallback = ( - model: IModel, - toolbar?: Toolbar, - trans?: ITranslator - ) => Promise; + export type Factory = (options: IFactoryOptions) => Promise; /** * Content and its context for diff diff --git a/tsconfig.json b/tsconfig.json index 532390a14..2629e2a77 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "resolveJsonModule": true, "outDir": "lib", "rootDir": "src", -"skipLibCheck": true, + "skipLibCheck": true, "strict": true, "strictNullChecks": true, "target": "ES2018", From dfd1de35697f0d043df77ad6c97e15a2bd329f55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Tue, 19 Sep 2023 17:11:10 +0200 Subject: [PATCH 07/24] Fix accessing the default browser --- src/index.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/index.ts b/src/index.ts index 3cc1dac14..d97f7e0b4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,7 +11,7 @@ import { import { IEditorServices } from '@jupyterlab/codeeditor'; import { IChangedArgs } from '@jupyterlab/coreutils'; import { IDocumentManager } from '@jupyterlab/docmanager'; -import { FileBrowserModel, IFileBrowserFactory } from '@jupyterlab/filebrowser'; +import { FileBrowserModel, IDefaultFileBrowser } from '@jupyterlab/filebrowser'; import { IMainMenu } from '@jupyterlab/mainmenu'; import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; @@ -47,7 +47,7 @@ const plugin: JupyterFrontEndPlugin = { requires: [ ILayoutRestorer, IEditorServices, - IFileBrowserFactory, + IDefaultFileBrowser, IRenderMimeRegistry, ISettingRegistry, IDocumentManager @@ -70,7 +70,12 @@ async function activate( app: JupyterFrontEnd, restorer: ILayoutRestorer, editorServices: IEditorServices, - factory: IFileBrowserFactory, + // Get a reference to the default file browser extension + // We don't use the current tracked browser because extension like jupyterlab-github + // or jupyterlab-gitlab are defining new filebrowsers that we don't support. + // And it is unlikely that another browser than the default will be used. + // Ref: https://github.com/jupyterlab/jupyterlab-git/issues/1014 + fileBrowser: IDefaultFileBrowser, renderMime: IRenderMimeRegistry, settingRegistry: ISettingRegistry, docmanager: IDocumentManager, @@ -81,12 +86,6 @@ async function activate( ): Promise { let settings: ISettingRegistry.ISettings | undefined = undefined; let serverSettings: Git.IServerSettings; - // Get a reference to the default file browser extension - // We don't use the current tracked browser because extension like jupyterlab-github - // or jupyterlab-gitlab are defining new filebrowsers that we don't support. - // And it is unlikely that another browser than the default will be used. - // Ref: https://github.com/jupyterlab/jupyterlab-git/issues/1014 - const fileBrowser = factory.createFileBrowser('id'); translator = translator ?? nullTranslator; const trans = translator.load('jupyterlab_git'); From 3d96fc28c80e2c856094db8a34707d21a7cbac1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Thu, 21 Sep 2023 10:03:53 +0200 Subject: [PATCH 08/24] Self review following application of the template --- .github/workflows/build.yml | 2 +- .gitignore | 13 + LICENSE | 2 +- README.md | 2 +- binder/environment.yml | 2 +- install.json | 4 +- jupyterlab_git/tests/test_handlers.py | 1004 ++++++++++++++++++++++++- pyproject.toml | 19 +- src/__tests__/jupyterlab_git.spec.ts | 9 - src/cloneCommand.ts | 7 +- src/commandsAndMenu.tsx | 12 +- ui-tests/tests/jupyterlab_git.spec.ts | 21 - 12 files changed, 1047 insertions(+), 50 deletions(-) delete mode 100644 src/__tests__/jupyterlab_git.spec.ts delete mode 100644 ui-tests/tests/jupyterlab_git.spec.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 454bef0a6..cc7b23cd8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -39,7 +39,7 @@ jobs: - name: Build the extension run: | set -eux - python -m pip install .[test] + python -m pip install .[dev,test] # Python formatting checks black . --check diff --git a/.gitignore b/.gitignore index ae58ed316..5c82327c6 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ node_modules/ jupyterlab_git/labextension # Version file is handled by hatchling jupyterlab_git/_version.py +src/version.ts # Integration tests ui-tests/test-results/ @@ -123,3 +124,15 @@ dmypy.json # Yarn cache .yarn/ + +# JetBrains IDE stuff +*.iml +.idea/ + +# vscode ide stuff +*.code-workspace +.history +.vscode + +# vim stuff +*.swp \ No newline at end of file diff --git a/LICENSE b/LICENSE index 3d314769e..484330aba 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2023, Jupyter Development Team +Copyright (c) 2020, Jupyter Development Team All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/README.md b/README.md index 7f1bc87ed..e71b2a6b2 100644 --- a/README.md +++ b/README.md @@ -214,7 +214,7 @@ git clone https://github.com/jupyterlab/jupyterlab-git.git # Change directory to the jupyterlab-git directory cd jupyterlab-git # Install package in development mode -pip install -e ".[test]" +pip install -e ".[dev,test]" pre-commit install # Link your development version of the extension with JupyterLab jupyter labextension develop . --overwrite diff --git a/binder/environment.yml b/binder/environment.yml index 2e3545997..230f74502 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -18,4 +18,4 @@ dependencies: - pip - wheel # additional packages for demos - # - ipywidgets + - nbgitpuller diff --git a/install.json b/install.json index 55ce3e46d..576ea253a 100644 --- a/install.json +++ b/install.json @@ -1,5 +1,5 @@ { "packageManager": "python", - "packageName": "jupyterlab_git", - "uninstallInstructions": "Use your Python package manager (pip, conda, etc.) to uninstall the package jupyterlab_git" + "packageName": "jupyterlab-git", + "uninstallInstructions": "Use your Python package manager (pip, conda, etc.) to uninstall the package jupyterlab-git" } diff --git a/jupyterlab_git/tests/test_handlers.py b/jupyterlab_git/tests/test_handlers.py index b854ad0c2..350250109 100644 --- a/jupyterlab_git/tests/test_handlers.py +++ b/jupyterlab_git/tests/test_handlers.py @@ -51,9 +51,1009 @@ async def test_all_history_handler_localbranch(mock_git, jp_fetch, jp_root_dir): mock_git.status.return_value = maybe_future(status) # When - response = await jp_fetch("jupyterlab-git", "get-example") + response = await jp_fetch( + NAMESPACE, local_path.name, "all_history", body=json.dumps(body), method="POST" + ) # Then + mock_git.show_top_level.assert_called_with(str(local_path)) + mock_git.branch.assert_called_with(str(local_path)) + mock_git.log.assert_called_with(str(local_path), 25) + mock_git.status.assert_called_with(str(local_path)) + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == { + "code": show_top_level["code"], + "data": { + "show_top_level": show_top_level, + "branch": branch, + "log": log, + "status": status, + }, + } + + +@patch("jupyterlab_git.git.execute") +async def test_git_show_prefix(mock_execute, jp_fetch, jp_root_dir): + # Given + path = "path/to/repo" + + local_path = jp_root_dir / "test_path" + + mock_execute.return_value = maybe_future((0, str(path), "")) + + # When + response = await jp_fetch( + NAMESPACE, + local_path.name + "/subfolder", + "show_prefix", + body="{}", + method="POST", + ) + + # Then + assert response.code == 200 + payload = json.loads(response.body) + assert payload["path"] == str(path) + mock_execute.assert_has_calls( + [ + call( + ["git", "rev-parse", "--show-prefix"], + cwd=str(local_path / "subfolder"), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + ] + ) + + +async def test_git_show_prefix_for_excluded_path( + jp_fetch, jp_server_config, jp_root_dir +): + local_path = jp_root_dir / "ignored-path" + + try: + response = await jp_fetch( + NAMESPACE, + local_path.name + "/subdir", + "show_prefix", + body="{}", + method="POST", + ) + except HTTPClientError as e: + assert e.code == 404 + + +@patch("jupyterlab_git.git.execute") +async def test_git_show_prefix_not_a_git_repo(mock_execute, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + + mock_execute.return_value = maybe_future( + (128, "", "fatal: not a git repository (or any") + ) + + # When + response = await jp_fetch( + NAMESPACE, + local_path.name + "/subfolder", + "show_prefix", + body="{}", + method="POST", + ) + + # Then + assert response.code == 200 + payload = json.loads(response.body) + assert payload["path"] is None + mock_execute.assert_has_calls( + [ + call( + ["git", "rev-parse", "--show-prefix"], + cwd=str(local_path / "subfolder"), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + ] + ) + + +@patch("jupyterlab_git.git.execute") +async def test_git_show_top_level(mock_execute, jp_fetch, jp_root_dir): + # Given + path = "path/to/repo" + + local_path = jp_root_dir / "test_path" + + mock_execute.return_value = maybe_future((0, str(path), "")) + + # When + response = await jp_fetch( + NAMESPACE, + local_path.name + "/subfolder", + "show_top_level", + body="{}", + method="POST", + ) + + # Then + assert response.code == 200 + payload = json.loads(response.body) + assert payload["path"] == str(path) + mock_execute.assert_has_calls( + [ + call( + ["git", "rev-parse", "--show-toplevel"], + cwd=str(local_path / "subfolder"), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + ] + ) + + +@patch("jupyterlab_git.git.execute") +async def test_git_show_top_level_not_a_git_repo(mock_execute, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + + mock_execute.return_value = maybe_future( + (128, "", "fatal: not a git repository (or any") + ) + + # When + response = await jp_fetch( + NAMESPACE, + local_path.name + "/subfolder", + "show_top_level", + body="{}", + method="POST", + ) + + # Then + assert response.code == 200 + payload = json.loads(response.body) + assert payload["path"] is None + mock_execute.assert_has_calls( + [ + call( + ["git", "rev-parse", "--show-toplevel"], + cwd=str(local_path / "subfolder"), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + ] + ) + + +@patch("jupyterlab_git.handlers.GitBranchHandler.git", spec=Git) +async def test_branch_handler_localbranch(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + branch = { + "code": 0, + "branches": [ + { + "is_current_branch": True, + "is_remote_branch": False, + "name": "feature-foo", + "upstream": "origin/feature-foo", + "top_commit": "abcdefghijklmnopqrstuvwxyz01234567890123", + "tag": None, + }, + { + "is_current_branch": False, + "is_remote_branch": False, + "name": "main", + "upstream": "origin/main", + "top_commit": "abcdefghijklmnopqrstuvwxyz01234567890123", + "tag": None, + }, + { + "is_current_branch": False, + "is_remote_branch": False, + "name": "feature-bar", + "upstream": None, + "top_commit": "01234567899999abcdefghijklmnopqrstuvwxyz", + "tag": None, + }, + { + "is_current_branch": False, + "is_remote_branch": True, + "name": "origin/feature-foo", + "upstream": None, + "top_commit": "abcdefghijklmnopqrstuvwxyz01234567890123", + "tag": None, + }, + { + "is_current_branch": False, + "is_remote_branch": True, + "name": "origin/main", + "upstream": None, + "top_commit": "abcdefghijklmnopqrstuvwxyz01234567890123", + "tag": None, + }, + ], + } + + mock_git.branch.return_value = maybe_future(branch) + + # When + response = await jp_fetch( + NAMESPACE, local_path.name, "branch", body="{}", method="POST" + ) + + # Then + mock_git.branch.assert_called_with(str(local_path)) + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == {"code": 0, "branches": branch["branches"]} + + +@patch("jupyterlab_git.handlers.GitLogHandler.git", spec=Git) +async def test_log_handler(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + log = {"code": 0, "commits": []} + mock_git.log.return_value = maybe_future(log) + + # When + body = {"history_count": 20} + response = await jp_fetch( + NAMESPACE, local_path.name, "log", body=json.dumps(body), method="POST" + ) + + # Then + mock_git.log.assert_called_with(str(local_path), 20, None) + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == log + + +@patch("jupyterlab_git.handlers.GitLogHandler.git", spec=Git) +async def test_log_handler_no_history_count(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + log = {"code": 0, "commits": []} + mock_git.log.return_value = maybe_future(log) + + # When + response = await jp_fetch( + NAMESPACE, local_path.name, "log", body="{}", method="POST" + ) + + # Then + mock_git.log.assert_called_with(str(local_path), 25, None) + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == log + + +@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) +async def test_push_handler_localbranch(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + mock_git.get_current_branch.return_value = maybe_future("localbranch") + mock_git.get_upstream_branch.return_value = maybe_future( + {"code": 0, "remote_short_name": ".", "remote_branch": "localbranch"} + ) + mock_git.push.return_value = maybe_future({"code": 0}) + + # When + response = await jp_fetch( + NAMESPACE, local_path.name, "push", body="{}", method="POST" + ) + + # Then + mock_git.get_current_branch.assert_called_with(str(local_path)) + mock_git.get_upstream_branch.assert_called_with(str(local_path), "localbranch") + mock_git.push.assert_called_with( + ".", "HEAD:localbranch", str(local_path), None, False, False + ) + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == {"code": 0} + + +@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) +async def test_push_handler_remotebranch(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + mock_git.get_current_branch.return_value = maybe_future("foo/bar") + upstream = { + "code": 0, + "remote_short_name": "origin/something", + "remote_branch": "remote-branch-name", + } + mock_git.get_upstream_branch.return_value = maybe_future(upstream) + mock_git.push.return_value = maybe_future({"code": 0}) + + # When + response = await jp_fetch( + NAMESPACE, local_path.name, "push", body="{}", method="POST" + ) + + # Then + mock_git.get_current_branch.assert_called_with(str(local_path)) + mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo/bar") + mock_git.push.assert_called_with( + "origin/something", + "HEAD:remote-branch-name", + str(local_path), + None, + False, + False, + ) + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == {"code": 0} + + +@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) +async def test_push_handler_noupstream(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + mock_git.get_current_branch.return_value = maybe_future("foo") + upstream = { + "code": 128, + "command": "", + "message": "fatal: no upstream configured for branch 'foo'", + } + mock_git.get_upstream_branch.return_value = maybe_future(upstream) + mock_git.config.return_value = maybe_future({"options": dict()}) + mock_git.remote_show.return_value = maybe_future({}) + mock_git.push.return_value = maybe_future({"code": 0}) + + # When + with pytest.raises(tornado.httpclient.HTTPClientError) as e: + await jp_fetch(NAMESPACE, local_path.name, "push", body="{}", method="POST") + + response = e.value.response + + # Then + mock_git.get_current_branch.assert_called_with(str(local_path)) + mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") + mock_git.config.assert_called_with(str(local_path)) + mock_git.remote_show.assert_called_with(str(local_path)) + mock_git.push.assert_not_called() + + assert response.code == 500 + payload = json.loads(response.body) + assert payload == { + "code": 128, + "message": "fatal: The current branch foo has no upstream branch.", + "remotes": list(), + } + + +@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) +async def test_push_handler_multipleupstream(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + remotes = ["origin", "upstream"] + mock_git.get_current_branch.return_value = maybe_future("foo") + upstream = {"code": -1, "message": "oups"} + mock_git.get_upstream_branch.return_value = maybe_future(upstream) + mock_git.config.return_value = maybe_future({"options": dict()}) + mock_git.remote_show.return_value = maybe_future({"remotes": remotes}) + mock_git.push.return_value = maybe_future({"code": 0}) + + # When + with pytest.raises(tornado.httpclient.HTTPClientError) as e: + await jp_fetch(NAMESPACE, local_path.name, "push", body="{}", method="POST") + response = e.value.response + + # Then + mock_git.get_current_branch.assert_called_with(str(local_path)) + mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") + mock_git.config.assert_called_with(str(local_path)) + mock_git.remote_show.assert_called_with(str(local_path)) + mock_git.push.assert_not_called() + + assert response.code == 500 + payload = json.loads(response.body) + assert payload == { + "code": 128, + "message": "fatal: The current branch foo has no upstream branch.", + "remotes": remotes, + } + + +@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) +async def test_push_handler_noupstream_unique_remote(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + remote = "origin" + mock_git.get_current_branch.return_value = maybe_future("foo") + upstream = {"code": -1, "message": "oups"} + mock_git.get_upstream_branch.return_value = maybe_future(upstream) + mock_git.config.return_value = maybe_future({"options": dict()}) + mock_git.remote_show.return_value = maybe_future({"remotes": [remote]}) + mock_git.push.return_value = maybe_future({"code": 0}) + + # When + response = await jp_fetch( + NAMESPACE, local_path.name, "push", body="{}", method="POST" + ) + + # Then + mock_git.get_current_branch.assert_called_with(str(local_path)) + mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") + mock_git.config.assert_called_with(str(local_path)) + mock_git.remote_show.assert_called_with(str(local_path)) + mock_git.push.assert_called_with( + remote, + "foo", + str(local_path), + None, + set_upstream=True, + force=False, + ) + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == {"code": 0} + + +@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) +async def test_push_handler_noupstream_pushdefault(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + remote = "rorigin" + mock_git.get_current_branch.return_value = maybe_future("foo") + upstream = {"code": -1, "message": "oups"} + mock_git.get_upstream_branch.return_value = maybe_future(upstream) + mock_git.config.return_value = maybe_future( + {"options": {"remote.pushdefault": remote}} + ) + mock_git.remote_show.return_value = maybe_future({"remotes": [remote, "upstream"]}) + mock_git.push.return_value = maybe_future({"code": 0}) + + # When + response = await jp_fetch( + NAMESPACE, local_path.name, "push", body="{}", method="POST" + ) + + # Then + mock_git.get_current_branch.assert_called_with(str(local_path)) + mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") + mock_git.config.assert_called_with(str(local_path)) + mock_git.remote_show.assert_called_with(str(local_path)) + mock_git.push.assert_called_with( + remote, + "foo", + str(local_path), + None, + set_upstream=True, + force=False, + ) + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == {"code": 0} + + +@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) +async def test_push_handler_noupstream_pass_remote_nobranch( + mock_git, jp_fetch, jp_root_dir +): + # Given + local_path = jp_root_dir / "test_path" + mock_git.get_current_branch.return_value = maybe_future("foo") + upstream = {"code": -1, "message": "oups"} + mock_git.get_upstream_branch.return_value = maybe_future(upstream) + mock_git.config.return_value = maybe_future({"options": dict()}) + mock_git.remote_show.return_value = maybe_future({}) + mock_git.push.return_value = maybe_future({"code": 0}) + + remote = "online" + + # When + body = {"remote": remote} + response = await jp_fetch( + NAMESPACE, local_path.name, "push", body=json.dumps(body), method="POST" + ) + + # Then + mock_git.get_current_branch.assert_called_with(str(local_path)) + mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") + mock_git.config.assert_not_called() + mock_git.remote_show.assert_not_called() + mock_git.push.assert_called_with( + remote, "HEAD:foo", str(local_path), None, True, False + ) + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == {"code": 0} + + +@patch("jupyterlab_git.handlers.GitPushHandler.git", spec=Git) +async def test_push_handler_noupstream_pass_remote_branch( + mock_git, jp_fetch, jp_root_dir +): + # Given + local_path = jp_root_dir / "test_path" + mock_git.get_current_branch.return_value = maybe_future("foo") + upstream = {"code": -1, "message": "oups"} + mock_git.get_upstream_branch.return_value = maybe_future(upstream) + mock_git.config.return_value = maybe_future({"options": dict()}) + mock_git.remote_show.return_value = maybe_future({}) + mock_git.push.return_value = maybe_future({"code": 0}) + + remote = "online" + remote_branch = "onfoo" + + # When + body = {"remote": "/".join((remote, remote_branch))} + response = await jp_fetch( + NAMESPACE, local_path.name, "push", body=json.dumps(body), method="POST" + ) + + # Then + mock_git.get_current_branch.assert_called_with(str(local_path)) + mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo") + mock_git.config.assert_not_called() + mock_git.remote_show.assert_not_called() + mock_git.push.assert_called_with( + remote, "HEAD:" + remote_branch, str(local_path), None, True, False + ) + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == {"code": 0} + + +@patch("jupyterlab_git.handlers.GitUpstreamHandler.git", spec=Git) +async def test_upstream_handler_forward_slashes(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + mock_git.get_current_branch.return_value = maybe_future("foo/bar") + upstream = { + "code": 0, + "remote_short_name": "origin/something", + "remote_branch": "foo/bar", + } + mock_git.get_upstream_branch.return_value = maybe_future(upstream) + + # When + response = await jp_fetch( + NAMESPACE, local_path.name, "upstream", body="{}", method="POST" + ) + + # Then + mock_git.get_current_branch.assert_called_with(str(local_path)) + mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo/bar") + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == upstream + + +@patch("jupyterlab_git.handlers.GitUpstreamHandler.git", spec=Git) +async def test_upstream_handler_localbranch(mock_git, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + mock_git.get_current_branch.return_value = maybe_future("foo/bar") + upstream = {"code": 0, "remote_short_name": ".", "remote_branch": "foo/bar"} + mock_git.get_upstream_branch.return_value = maybe_future(upstream) + + # When + response = await jp_fetch( + NAMESPACE, local_path.name, "upstream", body="{}", method="POST" + ) + + # Then + mock_git.get_current_branch.assert_called_with(str(local_path)) + mock_git.get_upstream_branch.assert_called_with(str(local_path), "foo/bar") + + assert response.code == 200 + payload = json.loads(response.body) + assert payload == upstream + + +@patch("jupyterlab_git.git.execute") +async def test_content(mock_execute, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + filename = "my/file" + content = "dummy content file\nwith multiple lines" + + mock_execute.side_effect = [ + maybe_future((0, "1\t1\t{}".format(filename), "")), + maybe_future((0, content, "")), + ] + + # When + body = { + "filename": filename, + "reference": {"git": "previous"}, + } + response = await jp_fetch( + NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" + ) + + # Then + assert response.code == 200 + payload = json.loads(response.body) + assert payload["content"] == content + mock_execute.assert_has_calls( + [ + call( + [ + "git", + "diff", + "--numstat", + "4b825dc642cb6eb9a060e54bf8d69288fbee4904", + "previous", + "--", + filename, + ], + cwd=str(local_path), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + call( + ["git", "show", "{}:{}".format("previous", filename)], + cwd=str(local_path), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + ] + ) + + +async def test_content_working(jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + filename = "my/file" + content = "dummy content file\nwith multiple lines" + + dummy_file = local_path / filename + dummy_file.parent.mkdir(parents=True) + dummy_file.write_text(content) + + # When + body = { + "filename": filename, + "reference": {"special": "WORKING"}, + } + response = await jp_fetch( + NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" + ) + + # Then + assert response.code == 200 + payload = json.loads(response.body) + assert payload["content"] == content + + +async def test_content_notebook_working(jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + filename = "my/notebook.ipynb" + content = """{ + "cells": [], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "mimetype": "text/x-python", + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} +""" + + dummy_file = local_path / filename + dummy_file.parent.mkdir(parents=True) + dummy_file.write_text(content) + + # When + body = { + "filename": filename, + "reference": {"special": "WORKING"}, + } + response = await jp_fetch( + NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" + ) + + # Then + assert response.code == 200 + payload = json.loads(response.body) + assert payload["content"] == content + + +@patch("jupyterlab_git.git.execute") +async def test_content_index(mock_execute, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + filename = "my/file" + content = "dummy content file\nwith multiple lines" + + mock_execute.side_effect = [ + maybe_future((0, "1\t1\t{}".format(filename), "")), + maybe_future((0, content, "")), + ] + + # When + body = { + "filename": filename, + "reference": {"special": "INDEX"}, + } + response = await jp_fetch( + NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" + ) + + # Then + assert response.code == 200 + payload = json.loads(response.body) + assert payload["content"] == content + mock_execute.assert_has_calls( + [ + call( + [ + "git", + "diff", + "--numstat", + "--cached", + "4b825dc642cb6eb9a060e54bf8d69288fbee4904", + "--", + filename, + ], + cwd=str(local_path), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + call( + ["git", "show", "{}:{}".format("", filename)], + cwd=str(local_path), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + ], + ) + + +@patch("jupyterlab_git.git.execute") +async def test_content_base(mock_execute, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + filename = "my/file" + content = "dummy content file\nwith multiple lines" + obj_ref = "915bb14609daab65e5304e59d89c626283ae49fc" + + mock_execute.side_effect = [ + maybe_future( + ( + 0, + "100644 {1} 1 {0}\x00100644 285bdbc14e499b85ec407512a3bb3992fa3d4082 2 {0}\x00100644 66ac842dfb0b5c20f757111d6b3edd56d80622b4 3 {0}\x00".format( + filename, obj_ref + ), + "", + ) + ), + maybe_future((0, content, "")), + ] + + # When + body = { + "filename": filename, + "reference": {"special": "BASE"}, + } + response = await jp_fetch( + NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" + ) + + # Then + assert response.code == 200 + payload = json.loads(response.body) + assert payload["content"] == content + mock_execute.assert_has_calls( + [ + call( + ["git", "ls-files", "-u", "-z", filename], + cwd=str(local_path), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + call( + ["git", "show", "915bb14609daab65e5304e59d89c626283ae49fc"], + cwd=str(local_path), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + ] + ) + + +@patch("jupyterlab_git.git.execute") +async def test_content_unknown_special(mock_execute, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + filename = "my/file" + content = "dummy content file\nwith multiple lines" + + mock_execute.side_effect = [ + maybe_future((0, "1\t1\t{}".format(filename), "")), + maybe_future((0, content, "")), + ] + + # When + body = { + "filename": filename, + "reference": {"special": "unknown"}, + } + + with pytest.raises(tornado.httpclient.HTTPClientError) as e: + await jp_fetch( + NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" + ) + assert_http_error(e, 500, expected_message="unknown special ref") + + +@patch("jupyterlab_git.git.execute") +async def test_content_show_handled_error(mock_execute, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + filename = "my/file" + + mock_execute.return_value = maybe_future( + ( + -1, + "", + "fatal: Path '{}' does not exist (neither on disk nor in the index)".format( + filename + ), + ) + ) + + # When + body = { + "filename": filename, + "reference": {"git": "current"}, + } + response = await jp_fetch( + NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" + ) + + # Then + assert response.code == 200 + payload = json.loads(response.body) + assert payload["content"] == "" + + +@patch("jupyterlab_git.git.execute") +async def test_content_binary(mock_execute, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + filename = "my/file" + + mock_execute.return_value = maybe_future((0, "-\t-\t{}".format(filename), "")) + + # When + body = { + "filename": filename, + "reference": {"git": "current"}, + } + + # Then + response = await jp_fetch( + NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" + ) + + mock_execute.assert_has_calls( + [ + call( + [ + "git", + "diff", + "--numstat", + "4b825dc642cb6eb9a060e54bf8d69288fbee4904", + "current", + "--", + filename, + ], + cwd=str(local_path), + timeout=20, + env=None, + username=None, + password=None, + is_binary=False, + ), + call( + ["git", "show", "{}:{}".format("current", filename)], + cwd=str(local_path), + timeout=20, + env=None, + username=None, + password=None, + is_binary=True, + ), + ] + ) + + +@patch("jupyterlab_git.git.execute") +async def test_content_show_unhandled_error(mock_execute, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + filename = "my/file" + + mock_execute.return_value = maybe_future((-1, "", "Dummy error")) + + # When + body = { + "filename": filename, + "reference": {"git": "current"}, + } + + # Then + with pytest.raises(tornado.httpclient.HTTPClientError) as e: + await jp_fetch( + NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" + ) + assert_http_error(e, 500, expected_message="Dummy error") + + +@patch("jupyterlab_git.git.execute") +async def test_content_getcontent_deleted_file(mock_execute, jp_fetch, jp_root_dir): + # Given + local_path = jp_root_dir / "test_path" + filename = "my/absent_file" + content = "dummy content file\nwith multiple lines" + + # When + body = { + "filename": filename, + "reference": {"special": "WORKING"}, + } + # Then + response = await jp_fetch( + NAMESPACE, local_path.name, "content", body=json.dumps(body), method="POST" + ) + assert response.code == 200 payload = json.loads(response.body) - assert payload == {"data": "This is /jupyterlab-git/get-example endpoint!"} + assert payload["content"] == "" diff --git a/pyproject.toml b/pyproject.toml index fb06a384a..4f52c207a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,17 +22,32 @@ classifiers = [ "Programming Language :: Python :: 3.11", ] dependencies = [ - "jupyter_server>=2.0.1,<3" + "jupyter_server>=2.0.1,<3", + "nbdime~=4.0", + "nbformat", + "packaging", + "pexpect", + "traitlets~=5.0", ] dynamic = ["version", "description", "authors", "urls", "keywords"] [project.optional-dependencies] +dev = [ + "black", + "jupyterlab~=4.0", + "pre-commit" +] test = [ "coverage", "pytest", "pytest-asyncio", "pytest-cov", - "pytest-jupyter[server]>=0.6.0" + "pytest-jupyter[server]>=0.6.0", + "hybridcontents", + "jupytext", +] +ui-tests = [ + "jupyter-archive" ] [tool.hatch.version] diff --git a/src/__tests__/jupyterlab_git.spec.ts b/src/__tests__/jupyterlab_git.spec.ts deleted file mode 100644 index 3fd2729a7..000000000 --- a/src/__tests__/jupyterlab_git.spec.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Example of [Jest](https://jestjs.io/docs/getting-started) unit tests - */ - -describe('@jupyterlab/git', () => { - it('should be tested', () => { - expect(1 + 1).toEqual(2); - }); -}); diff --git a/src/cloneCommand.ts b/src/cloneCommand.ts index 3f2c31370..0e6729165 100644 --- a/src/cloneCommand.ts +++ b/src/cloneCommand.ts @@ -4,7 +4,7 @@ import { } from '@jupyterlab/application'; import { ITranslator, nullTranslator } from '@jupyterlab/translation'; import { CommandIDs, IGitExtension, Level } from './tokens'; -import { IFileBrowserFactory } from '@jupyterlab/filebrowser'; +import { IDefaultFileBrowser } from '@jupyterlab/filebrowser'; import { Dialog, ICommandPalette, showDialog } from '@jupyterlab/apputils'; import { GitCloneForm } from './widgets/GitCloneForm'; import { logger } from './logger'; @@ -19,18 +19,17 @@ import { addCloneButton } from './widgets/gitClone'; export const gitCloneCommandPlugin: JupyterFrontEndPlugin = { id: '@jupyterlab/git:clone', - requires: [IGitExtension, IFileBrowserFactory], + requires: [IGitExtension, IDefaultFileBrowser], optional: [ICommandPalette, ITranslator], activate: ( app: JupyterFrontEnd, gitModel: IGitExtension, - fileBrowserFactory: IFileBrowserFactory, + fileBrowser: IDefaultFileBrowser, palette: ICommandPalette | null, translator: ITranslator | null ) => { translator = translator ?? nullTranslator; const trans = translator.load('jupyterlab_git'); - const fileBrowser = fileBrowserFactory.createFileBrowser('id'); const fileBrowserModel = fileBrowser.model; /** Add git clone command */ app.commands.addCommand(CommandIDs.gitClone, { diff --git a/src/commandsAndMenu.tsx b/src/commandsAndMenu.tsx index e5ecc8d4a..7aeabaebb 100644 --- a/src/commandsAndMenu.tsx +++ b/src/commandsAndMenu.tsx @@ -521,8 +521,8 @@ export function addCommands( ); logger.log({ message: trans.__('Reset failed'), - level: Level.ERROR - /*error*/ + level: Level.ERROR, + error: error as Error }); } } @@ -532,9 +532,9 @@ export function addCommands( /** * Git display diff command - internal command * - * @params model {Git.Diff.IModel: The diff model to display - * @params isText {boolean}: Optional, whether the content is a plain text - * @params isMerge {boolean}: Optional, whether the diff is a merge conflict + * @params model: The diff model to display + * @params isText: Optional, whether the content is a plain text + * @params isMerge: Optional, whether the diff is a merge conflict * @returns the main area widget or null */ commands.addCommand(CommandIDs.gitShowDiff, { @@ -566,7 +566,7 @@ export function addCommands( shell.activateById(id); break; } - mainAreaItem = mainAreaItems.next(); + mainAreaItem = mainAreaItems.next().value; } if (!mainAreaItem) { diff --git a/ui-tests/tests/jupyterlab_git.spec.ts b/ui-tests/tests/jupyterlab_git.spec.ts deleted file mode 100644 index c60ae7247..000000000 --- a/ui-tests/tests/jupyterlab_git.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { expect, test } from '@jupyterlab/galata'; - -/** - * Don't load JupyterLab webpage before running the tests. - * This is required to ensure we capture all log messages. - */ -test.use({ autoGoto: false }); - -test('should emit an activation console message', async ({ page }) => { - const logs: string[] = []; - - page.on('console', message => { - logs.push(message.text()); - }); - - await page.goto(); - - expect( - logs.filter(s => s === 'JupyterLab extension @jupyterlab/git is activated!') - ).toHaveLength(1); -}); From cf670075354a8d933c4819e1d6e19b5b19fb2fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Thu, 21 Sep 2023 18:26:13 +0200 Subject: [PATCH 09/24] First working version for diff text file --- package.json | 7 +- src/commandsAndMenu.tsx | 19 ++- src/components/diff/PlainTextDiff.ts | 197 ++++++++++++++++++++------ src/index.ts | 4 + src/model.ts | 8 +- style/diff-common.css | 48 ++++--- style/diff-nb.css | 98 ++++++------- style/diff-text.css | 93 +++++++----- ui-tests/tests/merge-conflict.spec.ts | 2 +- 9 files changed, 300 insertions(+), 176 deletions(-) diff --git a/package.json b/package.json index 61bf48b6f..3f6d39b3b 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,6 @@ "@lumino/polling": "^2.0.0", "@lumino/signaling": "^2.0.0", "@lumino/widgets": "^2.0.1", - "@mui/core": "^5.0.0-alpha.54", "@mui/icons-material": "^5.11.16", "@mui/lab": "^5.0.0-alpha.127", "@mui/material": "^5.12.1", @@ -175,13 +174,13 @@ "extension": true, "schemaDir": "schema", "sharedPackages": { - "@material-ui/core": { + "@mui/core": { "singleton": true }, - "@material-ui/icons": { + "@mui/icons": { "singleton": true }, - "@material-ui/lab": { + "@mui/lab": { "singleton": true }, "nbdime": { diff --git a/src/commandsAndMenu.tsx b/src/commandsAndMenu.tsx index 7aeabaebb..2e5d20ddf 100644 --- a/src/commandsAndMenu.tsx +++ b/src/commandsAndMenu.tsx @@ -58,6 +58,7 @@ import { AdvancedPushForm } from './widgets/AdvancedPushForm'; import { GitCredentialsForm } from './widgets/CredentialsBox'; import { discardAllChanges } from './widgets/discardAllChanges'; import { CheckboxForm } from './widgets/GitResetToRemoteForm'; +import { IEditorLanguageRegistry } from '@jupyterlab/codemirror'; export interface IGitCloneArgs { /** @@ -131,6 +132,7 @@ export function addCommands( app: JupyterFrontEnd, gitModel: GitExtension, editorFactory: CodeEditor.Factory, + languageRegistry: IEditorLanguageRegistry, fileBrowserModel: FileBrowserModel, settings: ISettingRegistry.ISettings, translator: ITranslator @@ -555,18 +557,23 @@ export function addCommands( const buildDiffWidget = getDiffProvider(fullPath) ?? (isText && - (options => createPlainTextDiff({ ...options, editorFactory }))); + (options => + createPlainTextDiff({ + ...options, + editorFactory, + languageRegistry + }))); if (buildDiffWidget) { const id = `git-diff-${fullPath}-${model.reference.label}-${model.challenger.label}`; const mainAreaItems = shell.widgets('main'); - let mainAreaItem = mainAreaItems.next().value; - while (mainAreaItem) { - if (mainAreaItem.id === id) { + let mainAreaItem: Widget | null = null; + for (const item of mainAreaItems) { + if (item.id === id) { shell.activateById(id); + mainAreaItem = item; break; } - mainAreaItem = mainAreaItems.next().value; } if (!mainAreaItem) { @@ -698,7 +705,7 @@ export function addCommands( ); if (!targetFile || targetFile.status === 'unmodified') { gitModel.statusChanged.disconnect(maybeClose); - mainAreaItem.dispose(); + mainAreaItem!.dispose(); } }; gitModel.statusChanged.connect(maybeClose); diff --git a/src/components/diff/PlainTextDiff.ts b/src/components/diff/PlainTextDiff.ts index 8bf626828..26ed89bc4 100644 --- a/src/components/diff/PlainTextDiff.ts +++ b/src/components/diff/PlainTextDiff.ts @@ -1,15 +1,23 @@ -import { CodeEditor } from '@jupyterlab/codeeditor'; +import { CodeEditor, IEditorMimeTypeService } from '@jupyterlab/codeeditor'; import { CodeMirrorEditorFactory, EditorExtensionRegistry, - EditorLanguageRegistry + EditorLanguageRegistry, + IEditorLanguageRegistry } from '@jupyterlab/codemirror'; import { Contents } from '@jupyterlab/services'; -import { nullTranslator, TranslationBundle } from '@jupyterlab/translation'; +import { TranslationBundle, nullTranslator } from '@jupyterlab/translation'; import { PromiseDelegate } from '@lumino/coreutils'; -import { Widget } from '@lumino/widgets'; -import { createNbdimeMergeView, MergeView } from 'nbdime/lib/common/mergeview'; -import { StringDiffModel } from 'nbdime/lib/diff/model'; +import { Panel, Widget } from '@lumino/widgets'; +import { + DIFF_DELETE, + DIFF_EQUAL, + DIFF_INSERT, + diff_match_patch +} from 'diff-match-patch'; +import { MergeView, createNbdimeMergeView } from 'nbdime/lib/common/mergeview'; +import { IStringDiffModel, StringDiffModel } from 'nbdime/lib/diff/model'; +import { DiffRangeRaw } from 'nbdime/lib/diff/range'; import { Git } from '../../tokens'; /** @@ -21,14 +29,17 @@ import { Git } from '../../tokens'; */ export const createPlainTextDiff = async ({ editorFactory, + languageRegistry, model, toolbar, translator }: Git.Diff.IFactoryOptions & { + languageRegistry: IEditorLanguageRegistry; editorFactory?: CodeEditor.Factory; }): Promise => { const widget = new PlainTextDiff({ model, + languageRegistry, editorFactory, trans: (translator ?? nullTranslator).load('jupyterlab_git') }); @@ -39,27 +50,34 @@ export const createPlainTextDiff = async ({ /** * Plain Text Diff widget */ -export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { +export class PlainTextDiff extends Panel implements Git.Diff.IDiffWidget { constructor({ model, + languageRegistry, trans, editorFactory }: { model: Git.Diff.IModel; + languageRegistry: IEditorLanguageRegistry; editorFactory?: CodeEditor.Factory; trans?: TranslationBundle; }) { - super({ - node: PlainTextDiff.createNode( - model.reference.label, - model.base?.label ?? '', - model.challenger.label - ) - }); + super(); + this.addClass('jp-git-diff-root'); + this.addClass('nbdime-root'); + this.addWidget( + new Widget({ + node: PlainTextDiff.createHeader( + model.reference.label, + model.base?.label, + model.challenger.label + ) + }) + ); const getReady = new PromiseDelegate(); this._isReady = getReady.promise; - this._container = this.node.lastElementChild as HTMLElement; this._editorFactory = editorFactory ?? createEditorFactory(); + this._languageRegistry = languageRegistry; this._model = model; this._trans = trans ?? nullTranslator.load('jupyterlab_git'); @@ -140,7 +158,6 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { this.createDiffView( this._challenger, this._reference, - this._languageRegistry, this._hasConflict ? this._base : null ); } @@ -150,13 +167,6 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { }); } - /** - * Undo onAfterAttach - */ - onBeforeDetach(): void { - this._container.innerHTML = ''; - } - /** * Refresh diff * @@ -166,7 +176,6 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { await this.ready; try { // Clear all - this._container.innerHTML = ''; this._mergeView.dispose(); // ENH request content only if it changed @@ -183,7 +192,6 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { this.createDiffView( this._challenger!, this._reference!, - this._languageRegistry, this._hasConflict ? this._base : null ); @@ -198,19 +206,17 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { /** * Create wrapper node */ - protected static createNode(...labels: string[]): HTMLElement { + protected static createHeader( + ...labels: (string | undefined)[] + ): HTMLElement { const bannerClass = labels[1] !== undefined ? 'jp-git-merge-banner' : 'jp-git-diff-banner'; const head = document.createElement('div'); - head.className = 'jp-git-diff-root'; - head.innerHTML = ` -
    - ${labels - .filter(label => !!label) - .map(label => `${label}`) - .join('')} -
    - `; + head.classList.add(bannerClass); + head.innerHTML = labels + .filter(label => !!label) + .map(label => `${label}`) + .join(''); return head; } @@ -223,21 +229,24 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { protected async createDiffView( challengerContent: string, referenceContent: string, - languageRegistry: EditorLanguageRegistry | null = null, baseContent: string | null = null ): Promise { if (!this._mergeView) { - const remote = new StringDiffModel( - referenceContent, - challengerContent, - [], - [] - ); + const remote = createStringDiffModel(referenceContent, challengerContent); + + const mimetype = + this._languageRegistry.findByFileName(this._model.filename)?.mime ?? + this._languageRegistry.findBest(this._model.filename)?.mime ?? + IEditorMimeTypeService.defaultMimeType; + remote.mimetype = Array.isArray(mimetype) ? mimetype[0] : mimetype; this._mergeView = createNbdimeMergeView({ - remote, - factory: this._editorFactory + remote + // factory: this._editorFactory }); + this._mergeView.addClass('jp-git-PlainText-diff'); + + this.addWidget(this._mergeView); } return Promise.resolve(); @@ -255,13 +264,17 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { (error as any)?.traceback ); const msg = ((error.message || error) as string).replace('\n', '
    '); + while (this.widgets.length > 0) { + const w = this.widgets[0]; + this.layout?.removeWidget(w); + w.dispose(); + } this.node.innerHTML = ``; } - protected _container: HTMLElement; protected _editorFactory: CodeEditor.Factory; protected _isReady: Promise; // @ts-expect-error complex initialization @@ -271,10 +284,102 @@ export class PlainTextDiff extends Widget implements Git.Diff.IDiffWidget { private _reference: string | null = null; private _challenger: string | null = null; - private _languageRegistry: EditorLanguageRegistry | null = null; + private _languageRegistry: IEditorLanguageRegistry; private _base: string | null = null; } +/** + * Diff status + */ +enum DiffStatus { + Equal = DIFF_EQUAL, + Delete = DIFF_DELETE, + Insert = DIFF_INSERT +} + +/** + * Diff type + */ +type Diff = [DiffStatus, string]; + +/** + * Pointer to the diff algorithm + */ +let dmp: any; +/** + * Compute the diff between two strings. + * + * @param a Reference + * @param b Challenger + * @param ignoreWhitespace Whether to ignore white spaces or not + * @returns Diff list + */ +function getDiff(a: string, b: string, ignoreWhitespace?: boolean): Diff[] { + if (!dmp) { + dmp = new diff_match_patch(); + } + + const diff = dmp.diff_main(a, b); + dmp.diff_cleanupSemantic(diff); + // The library sometimes leaves in empty parts, which confuse the algorithm + for (let i = 0; i < diff.length; ++i) { + const part = diff[i]; + if (ignoreWhitespace ? !/[^ \t]/.test(part[1]) : !part[1]) { + diff.splice(i--, 1); + } else if (i && diff[i - 1][0] === part[0]) { + diff.splice(i--, 1); + diff[i][1] += part[1]; + } + } + return diff; +} + +/** + * Create nbdime diff model from two strings. + * + * @param reference Reference text + * @param challenger Challenger text + * @param ignoreWhitespace Whether to ignore white spaces or not + * @returns The nbdime diff model + */ +function createStringDiffModel( + reference: string, + challenger: string, + ignoreWhitespace?: boolean +): IStringDiffModel { + const diffs = getDiff(reference, challenger, ignoreWhitespace); + + const additions: DiffRangeRaw[] = []; + const deletions: DiffRangeRaw[] = []; + + let referencePos = 0; + let challengerPos = 0; + diffs.forEach(([status, str]) => { + switch (status) { + case DiffStatus.Delete: + deletions.push(new DiffRangeRaw(referencePos, str.length)); + referencePos += str.length; + break; + case DiffStatus.Insert: + additions.push(new DiffRangeRaw(challengerPos, str.length)); + challengerPos += str.length; + break; + // Equal is not represented in nbdime + case DiffStatus.Equal: + referencePos += str.length; + challengerPos += str.length; + break; + } + }); + + return new StringDiffModel(reference, challenger, additions, deletions); +} + +/** + * Create a default editor factory. + * + * @returns Editor factory + */ function createEditorFactory(): CodeEditor.Factory { const factory = new CodeMirrorEditorFactory({ extensions: new EditorExtensionRegistry(), diff --git a/src/index.ts b/src/index.ts index d97f7e0b4..01d9faec4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -32,6 +32,7 @@ import { gitIcon } from './style/icons'; import { CommandIDs, Git, IGitExtension } from './tokens'; import { addCloneButton } from './widgets/gitClone'; import { GitWidget } from './widgets/GitWidget'; +import { IEditorLanguageRegistry } from '@jupyterlab/codemirror'; export { DiffModel } from './components/diff/model'; export { NotebookDiff } from './components/diff/NotebookDiff'; @@ -46,6 +47,7 @@ const plugin: JupyterFrontEndPlugin = { id: '@jupyterlab/git:plugin', requires: [ ILayoutRestorer, + IEditorLanguageRegistry, IEditorServices, IDefaultFileBrowser, IRenderMimeRegistry, @@ -69,6 +71,7 @@ export default [plugin, gitCloneCommandPlugin]; async function activate( app: JupyterFrontEnd, restorer: ILayoutRestorer, + languageRegistry: IEditorLanguageRegistry, editorServices: IEditorServices, // Get a reference to the default file browser extension // We don't use the current tracked browser because extension like jupyterlab-github @@ -183,6 +186,7 @@ async function activate( editorServices.factoryService.newInlineEditor.bind( editorServices.factoryService ), + languageRegistry, fileBrowser.model, settings, translator diff --git a/src/model.ts b/src/model.ts index c694fc3e4..e15939ffb 100644 --- a/src/model.ts +++ b/src/model.ts @@ -358,9 +358,9 @@ export class GitExtension implements IGitExtension { * * Note: This makes sure it always returns non null value */ - protected get _currentMarker(): BranchMarker | null { + protected get _currentMarker(): BranchMarker { if (!this.pathRepository) { - return null; + return new BranchMarker(() => {}); } if (!this.__currentMarker) { @@ -2219,8 +2219,8 @@ export class GitExtension implements IGitExtension { private _docRegistry: DocumentRegistry | null; private _fetchPoll: Poll; private _isDisposed = false; - private _markerCache: Markers = new Markers(() => this._markChanged.emit()); - private __currentMarker: BranchMarker | null = null; + private _markerCache = new Markers(() => this._markChanged.emit()); + private __currentMarker: BranchMarker = new BranchMarker(() => {}); private _readyPromise: Promise = Promise.resolve(); private _pendingReadyPromise = 0; private _settings: ISettingRegistry.ISettings | null; diff --git a/style/diff-common.css b/style/diff-common.css index 57fd4d16e..de590ce69 100644 --- a/style/diff-common.css +++ b/style/diff-common.css @@ -20,6 +20,8 @@ outline: none; background: var(--jp-layout-color0); color: var(--jp-ui-font-color0); + padding: 0; + overflow: hidden; } button.jp-git-diff-refresh { @@ -73,7 +75,7 @@ button.jp-git-diff-resolve .jp-ToolbarButtonComponent-label { width: 3.5%; } -.jp-git-diff-root .CodeMirror-merge { +.jp-git-diff-root .cm-merge { position: relative; white-space: pre; border: var(--codemirror-border); @@ -81,83 +83,83 @@ button.jp-git-diff-resolve .jp-ToolbarButtonComponent-label { background: var(--jp-cell-editor-background); } -.jp-git-diff-root .CodeMirror { +.jp-git-diff-root .cm { background: var(--jp-layout-color0); } -.jp-git-diff-root .CodeMirror-merge, -.CodeMirror-merge .CodeMirror { +.jp-git-diff-root .cm-merge, +.cm-merge .cm { height: auto; } -.jp-git-diff-root .CodeMirror-merge-4pane .CodeMirror-merge-pane-deleted { +.jp-git-diff-root .cm-merge-4pane .cm-merge-pane-deleted { display: none; } -.jp-git-diff-root .CodeMirror-merge-pane-unchanged { +.jp-git-diff-root .cm-merge-pane-unchanged { width: 100%; } -.jp-git-diff-root .CodeMirror-merge-pane { +.jp-git-diff-root .cm-merge-pane { display: inline-block; white-space: normal; vertical-align: top; } -.jp-git-diff-root .CodeMirror-merge-1pane .CodeMirror-merge-gap { +.jp-git-diff-root .cm-merge-1pane .cm-merge-gap { width: 6%; } -.jp-git-diff-root .CodeMirror-merge-2pane .CodeMirror-merge-pane { +.jp-git-diff-root .cm-merge-2pane .cm-merge-pane { width: 47%; } -.jp-git-diff-root .CodeMirror-merge-2pane .CodeMirror-merge-gap { +.jp-git-diff-root .cm-merge-2pane .cm-merge-gap { width: 6%; } -.jp-git-diff-root .CodeMirror-merge-3pane .CodeMirror-merge-pane { +.jp-git-diff-root .cm-merge-3pane .cm-merge-pane { width: 31%; } -.jp-git-diff-root .CodeMirror-merge-3pane .CodeMirror-merge-gap { +.jp-git-diff-root .cm-merge-3pane .cm-merge-gap { width: 3.5%; } -.jp-git-diff-root .CodeMirror-merge-pane-rightmost { +.jp-git-diff-root .cm-merge-pane-rightmost { position: absolute; right: 0; z-index: 1; } -.jp-git-diff-root .CodeMirror-merge-scrolllock-wrap { +.jp-git-diff-root .cm-merge-scrolllock-wrap { position: absolute; bottom: 0; left: 50%; } -.jp-git-diff-root .CodeMirror-merge-scrolllock { +.jp-git-diff-root .cm-merge-scrolllock { position: relative; left: -50%; cursor: pointer; line-height: 1; } -.jp-git-diff-root .CodeMirror-merge-r-inserted, -.jp-git-diff-root .CodeMirror-merge-l-inserted { +.jp-git-diff-root .cm-merge-r-inserted, +.jp-git-diff-root .cm-merge-l-inserted { background-color: var(--jp-git-diff-added-color); } -.jp-git-diff-root .CodeMirror-merge-r-deleted, -.jp-git-diff-root .CodeMirror-merge-l-deleted { +.jp-git-diff-root .cm-merge-r-deleted, +.jp-git-diff-root .cm-merge-l-deleted { background-color: var(--jp-git-diff-deleted-color); } -.jp-git-diff-root .CodeMirror-merge-collapsed-widget::before { +.jp-git-diff-root .cm-merge-collapsed-widget::before { content: '(...)'; } -.jp-git-diff-root .CodeMirror-merge-collapsed-widget { +.jp-git-diff-root .cm-merge-collapsed-widget { cursor: pointer; color: var(--jp-ui-font-color1); background: var(--jp-layout-color2); @@ -167,11 +169,11 @@ button.jp-git-diff-resolve .jp-ToolbarButtonComponent-label { border-radius: 4px; } -.jp-git-diff-root .CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { +.jp-git-diff-root .cm-merge-collapsed-line .cm-gutter-elt { display: none; } -.jp-git-diff-root .CodeMirror-merge-spacer { +.jp-git-diff-root .cm-merge-spacer { background-image: repeating-linear-gradient( 145deg, transparent, diff --git a/style/diff-nb.css b/style/diff-nb.css index 66dc3c2e8..77e950752 100644 --- a/style/diff-nb.css +++ b/style/diff-nb.css @@ -16,57 +16,48 @@ border: none; } -.jp-git-diff-root .jp-Notebook-diff .CodeMirror-merge-r-chunk-end, -.jp-git-diff-root .jp-Notebook-diff .CodeMirror-merge-l-chunk-end, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-l-chunk-end, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-r-chunk-end, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-m-chunk-end-local, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-m-chunk-end-remote { +.jp-git-diff-root .jp-Notebook-diff .cm-merge-r-chunk-end, +.jp-git-diff-root .jp-Notebook-diff .cm-merge-l-chunk-end, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-l-chunk-end, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-r-chunk-end, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-m-chunk-end-local, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-m-chunk-end-remote { border-bottom: none; } -.jp-git-diff-root .jp-Notebook-diff .CodeMirror-merge-r-chunk-start, -.jp-git-diff-root .jp-Notebook-diff .CodeMirror-merge-l-chunk-start, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-l-chunk-start, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-r-chunk-start, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-m-chunk-start-local, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-m-chunk-start-remote { +.jp-git-diff-root .jp-Notebook-diff .cm-merge-r-chunk-start, +.jp-git-diff-root .jp-Notebook-diff .cm-merge-l-chunk-start, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-l-chunk-start, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-r-chunk-start, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-m-chunk-start-local, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-m-chunk-start-remote { border-top: none; } -.jp-git-diff-root .jp-Notebook-diff .CodeMirror-merge-r-chunk, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-r-chunk { +.jp-git-diff-root .jp-Notebook-diff .cm-merge-r-chunk, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-r-chunk { background-color: var(--jp-git-diff-deleted-color); } -.jp-git-diff-root - .jp-Notebook-diff - .CodeMirror-merge-pane-remote - .CodeMirror-merge-r-chunk { +.jp-git-diff-root .jp-Notebook-diff .cm-merge-pane-remote .cm-merge-r-chunk { background-color: var(--jp-git-diff-added-color); } -.jp-git-diff-root .jp-Notebook-diff .CodeMirror-merge-spacer, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-spacer, -.jp-git-diff-root - .jp-Notebook-diff - .CodeMirror-merge-pane-remote - .CodeMirror-merge-spacer, -.jp-git-diff-root - .jp-Notebook-merge - .CodeMirror-merge-pane-remote - .CodeMirror-merge-spacer { +.jp-git-diff-root .jp-Notebook-diff .cm-merge-spacer, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-spacer, +.jp-git-diff-root .jp-Notebook-diff .cm-merge-pane-remote .cm-merge-spacer, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-pane-remote .cm-merge-spacer { background-color: transparent; } -.jp-git-diff-root .jp-Diff-added .CodeMirror, +.jp-git-diff-root .jp-Diff-added .cm, .jp-git-diff-root .jp-Diff-added .jp-Diff-renderedOutput, .jp-git-diff-root .jp-Cellrow-outputs .jp-Diff-twoway .jp-Diff-remote { background-color: var(--jp-git-diff-added-color); border: none; } -.jp-git-diff-root .jp-Diff-deleted .CodeMirror, +.jp-git-diff-root .jp-Diff-deleted .cm, .jp-git-diff-root .jp-Diff-deleted .jp-Diff-renderedOutput, .jp-git-diff-root .jp-Cellrow-outputs .jp-Diff-twoway .jp-Diff-base { background-color: var(--jp-git-diff-deleted-color); @@ -75,10 +66,8 @@ /* Specific rules for the notebook merge conflict */ .jp-git-diff-root .jp-Notebook-merge .jp-Merge-conflict, -.jp-git-diff-root .jp-Notebook-merge .CodeMirror-merge-l-chunk, -.jp-git-diff-root - .jp-Notebook-merge - .CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-l-chunk, +.jp-git-diff-root .jp-Notebook-merge .cm-merge-l-chunk.cm-merge-r-chunk, .jp-git-diff-root .jp-Notebook-merge .jp-Cellrow-outputs.jp-conflicted-outputs @@ -86,47 +75,44 @@ background-color: var(--jp-git-diff-deleted-color); } -.jp-git-diff-root - .jp-Notebook-merge - .CodeMirror-line - .CodeMirror-merge-r-inserted { +.jp-git-diff-root .jp-Notebook-merge .cm-line .cm-merge-r-inserted { background-color: var(--jp-git-diff-deleted-color); } .jp-git-diff-root .jp-Notebook-merge - .CodeMirror-merge-pane-base - .CodeMirror-line - .CodeMirror-merge-m-deleted, + .cm-merge-pane-base + .cm-line + .cm-merge-m-deleted, .jp-git-diff-root .jp-Notebook-merge - .CodeMirror-merge-pane-base - .CodeMirror-line - .CodeMirror-merge-l-deleted, + .cm-merge-pane-base + .cm-line + .cm-merge-l-deleted, .jp-git-diff-root .jp-Notebook-merge - .CodeMirror-merge-pane-base - .CodeMirror-line - .CodeMirror-merge-r-deleted { + .cm-merge-pane-base + .cm-line + .cm-merge-r-deleted { background-color: var(--jp-git-diff-deleted-color); color: var(--jp-mirror-editor-string-color); } .jp-git-diff-root .jp-Notebook-merge - .CodeMirror-merge-pane-base - .CodeMirror-line - .CodeMirror-merge-m-added, + .cm-merge-pane-base + .cm-line + .cm-merge-m-added, .jp-git-diff-root .jp-Notebook-merge - .CodeMirror-merge-pane-base - .CodeMirror-line - .CodeMirror-merge-l-added, + .cm-merge-pane-base + .cm-line + .cm-merge-l-added, .jp-git-diff-root .jp-Notebook-merge - .CodeMirror-merge-pane-base - .CodeMirror-line - .CodeMirror-merge-r-added { + .cm-merge-pane-base + .cm-line + .cm-merge-r-added { background-color: var(--jp-git-diff-added-color); color: var(--jp-mirror-editor-string-color); } diff --git a/style/diff-text.css b/style/diff-text.css index d4d4067d6..b91d12831 100644 --- a/style/diff-text.css +++ b/style/diff-text.css @@ -1,15 +1,16 @@ .jp-git-PlainText-diff { width: 100%; max-height: calc(100% - 23px); + overflow-y: auto; } -.jp-git-PlainText-diff .CodeMirror-merge, -.jp-git-PlainText-diff .CodeMirror-merge .CodeMirror, -.jp-git-PlainText-diff .CodeMirror-merge .CodeMirror-merge-pane { +/* .jp-git-PlainText-diff .cm-merge, +.jp-git-PlainText-diff .cm-merge .cm, +.jp-git-PlainText-diff .cm-merge .cm-merge-pane { height: 100%; } -.jp-git-PlainText-diff .CodeMirror-merge-gap { +.jp-git-PlainText-diff .cm-merge-gap { z-index: 2; display: inline-block; height: 100%; @@ -21,91 +22,111 @@ position: relative; color: var(--jp-ui-font-color2); background: var(--jp-layout-color2); +} */ + +.jp-git-PlainText-diff .cm-merge-r-chunk { + background-color: var(--jp-diff-deleted-color2); } -.jp-git-PlainText-diff .CodeMirror-merge-r-inserted, -.jp-git-PlainText-diff .CodeMirror-merge-l-inserted { - background-position: bottom left; - background-repeat: repeat-x; +.jp-git-PlainText-diff .cm-merge-r-chunk-start { + border-top: 1px solid var(--jp-diff-deleted-color0); } -.jp-git-PlainText-diff .CodeMirror-merge-r-deleted, -.jp-git-PlainText-diff .CodeMirror-merge-l-deleted { - background-position: bottom left; - background-repeat: repeat-x; +.jp-git-PlainText-diff .cm-merge-r-chunk-end { + border-bottom: 1px solid var(--jp-diff-deleted-color0); } -.jp-git-PlainText-diff .CodeMirror-merge-l-chunk, -.jp-git-PlainText-diff .CodeMirror-merge-editor .CodeMirror-merge-l-chunk, -.jp-git-PlainText-diff .CodeMirror-merge-editor .CodeMirror-merge-r-chunk { - background-color: var(--jp-git-diff-added-color); +.jp-git-PlainText-diff .cm-merge-r-connect { + fill: var(--jp-diff-deleted-color2); + stroke: var(--jp-diff-deleted-color0); + stroke-width: 1px; } -.jp-git-PlainText-diff .CodeMirror-merge-left .CodeMirror-merge-l-chunk, -.jp-git-PlainText-diff .CodeMirror-merge-right .CodeMirror-merge-r-chunk { - background-color: var(--jp-git-diff-deleted-color); +.jp-git-PlainText-diff .cm-merge-spacer { + background-color: var(--jp-diff-deleted-color2); +} + +.jp-git-PlainText-diff .cm-line .cm-merge-r-inserted { + background-color: var(--jp-diff-added-color0); +} + +.jp-git-PlainText-diff .cm-diff-right-editor .cm-merge-r-chunk { + background-color: var(--jp-diff-added-color2); +} + +.jp-git-PlainText-diff .cm-diff-right-editor .cm-merge-r-chunk-start { + border-top: 1px solid var(--jp-diff-added-color0); +} + +.jp-git-PlainText-diff .cm-diff-right-editor .cm-merge-r-chunk-end { + border-bottom: 1px solid var(--jp-diff-added-color0); +} + +.jp-git-PlainText-diff .cm-diff-right-editor .cm-merge-r-connect { + fill: var(--jp-diff-added-color2); + stroke: var(--jp-diff-added-color0); + stroke-width: 1px; +} + +.jp-git-PlainText-diff .cm-diff-right-editor .cm-merge-spacer { + background-color: var(--jp-diff-added-color2); } -.CodeMirror-patchgutter { +.cm-patchgutter { width: 0.7em; } -.CodeMirror-patchgutter-insert::before { +.cm-patchgutter-insert::before { content: '+'; color: #999; background-color: var(--jp-git-diff-added-color); } -.CodeMirror-patchgutter-delete::before { +.cm-patchgutter-delete::before { content: '-'; color: #999; background-color: var(--jp-git-diff-deleted-color); } /* Styles for horizontal scroll lock */ -.jp-git-PlainText-diff .CodeMirror-merge-scrolllock { +.jp-git-PlainText-diff .cm-merge-scrolllock { color: var(--jp-inverse-layout-color2); } -.jp-git-PlainText-diff .CodeMirror-merge-scrolllock::after { +.jp-git-PlainText-diff .cm-merge-scrolllock::after { content: '\21db\00a0\00a0\21da'; } -.jp-git-PlainText-diff - .CodeMirror-merge-scrolllock.CodeMirror-merge-scrolllock-enabled::after { +.jp-git-PlainText-diff .cm-merge-scrolllock.cm-merge-scrolllock-enabled::after { content: '\21db\21da'; } /* Styles for revert buttons handling */ -.jp-git-PlainText-diff .CodeMirror-merge-copybuttons-left, -.jp-git-PlainText-diff .CodeMirror-merge-copybuttons-right { +.jp-git-PlainText-diff .cm-merge-copybuttons-left, +.jp-git-PlainText-diff .cm-merge-copybuttons-right { position: absolute; inset: 0; line-height: 1; } -.jp-git-PlainText-diff .CodeMirror-merge-copy { +.jp-git-PlainText-diff .cm-merge-copy { position: absolute; cursor: pointer; color: var(--jp-brand-color1); z-index: 3; } -.jp-git-PlainText-diff .CodeMirror-merge-copy-reverse { +.jp-git-PlainText-diff .cm-merge-copy-reverse { position: absolute; cursor: pointer; color: var(--jp-brand-color1); } -.jp-git-PlainText-diff - .CodeMirror-merge-copybuttons-left - .CodeMirror-merge-copy { +.jp-git-PlainText-diff .cm-merge-copybuttons-left .cm-merge-copy { left: 2px; } -.jp-git-PlainText-diff - .CodeMirror-merge-copybuttons-right - .CodeMirror-merge-copy { +.jp-git-PlainText-diff .cm-merge-copybuttons-right .cm-merge-copy { right: 2px; } diff --git a/ui-tests/tests/merge-conflict.spec.ts b/ui-tests/tests/merge-conflict.spec.ts index 4a2b9f6a0..b508ff5ba 100644 --- a/ui-tests/tests/merge-conflict.spec.ts +++ b/ui-tests/tests/merge-conflict.spec.ts @@ -56,7 +56,7 @@ test.describe('Merge conflict tests', () => { await expect(banner).toHaveText(/Result/); await expect(banner).toHaveText(/Incoming/); - const mergeDiff = page.locator('.CodeMirror-merge-3pane'); + const mergeDiff = page.locator('.cm-merge-3pane'); await expect(mergeDiff).toBeVisible(); }); From 542af579be432d56d8b120e9ca65655efbf328ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Thu, 5 Oct 2023 16:04:59 +0200 Subject: [PATCH 10/24] Update yarn.locks following rebase --- src/components/NewTagDialog.tsx | 8 +- src/version.ts | 2 +- ui-tests/yarn.lock | 7372 ++++++---- yarn.lock | 23680 ++++++++++++++++-------------- 4 files changed, 16853 insertions(+), 14209 deletions(-) diff --git a/src/components/NewTagDialog.tsx b/src/components/NewTagDialog.tsx index 539c76d62..77c5e5c11 100644 --- a/src/components/NewTagDialog.tsx +++ b/src/components/NewTagDialog.tsx @@ -1,6 +1,6 @@ -import Dialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; -import ClearIcon from '@material-ui/icons/Clear'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import ClearIcon from '@mui/icons-material/Clear'; import { TranslationBundle } from '@jupyterlab/translation'; import * as React from 'react'; import { classes } from 'typestyle'; @@ -392,7 +392,7 @@ export const NewTagDialogBox: React.FunctionComponent = ( try { await props.model.setTag(tagName, baseCommitId); } catch (err) { - setErrorState(err.message.replace(/^fatal:/, '')); + setErrorState((err as any).message.replace(/^fatal:/, '')); props.logger.log({ level: Level.ERROR, message: props.trans.__('Failed to create tag.') diff --git a/src/version.ts b/src/version.ts index 6ecddb12d..b004afe07 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,2 +1,2 @@ // generated by genversion -export const version = '0.42.0'; +export const version = '0.43.0'; diff --git a/ui-tests/yarn.lock b/ui-tests/yarn.lock index 6ec5aa4af..ecd5548eb 100644 --- a/ui-tests/yarn.lock +++ b/ui-tests/yarn.lock @@ -1,3060 +1,4312 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/runtime@^7.1.2": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" - integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== - dependencies: - regenerator-runtime "^0.13.4" - -"@blueprintjs/colors@^4.0.0-alpha.2": - version "4.0.0-alpha.2" - resolved "https://registry.yarnpkg.com/@blueprintjs/colors/-/colors-4.0.0-alpha.2.tgz#ce8e7450ae542fcddb72b372b49669adf13c0173" - integrity sha512-B8NX2oKVTPGVJd7ZCbm9FMPoEdQiLKceo0/UxsJ+gwqNiuo45RzdmrXACI6oFO4hGHL2WiLU0oysLNj2zpHDkA== - -"@blueprintjs/core@^3.36.0", "@blueprintjs/core@^3.53.0": - version "3.53.0" - resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-3.53.0.tgz#ad9ac906107baf07a3a84f2c705e70032a053fb5" - integrity sha512-cvoJJtnPrBgaVvWhfHoFi/zH+Bk4VPDqbG4DdBl+BPK5MyvvkcBP/oX/iVG1qgwdvQ9FqUsHpuCLLgF6j8bItA== - dependencies: - "@blueprintjs/colors" "^4.0.0-alpha.2" - "@blueprintjs/icons" "^3.32.0" - "@types/dom4" "^2.0.1" - classnames "^2.2" - dom4 "^2.1.5" - normalize.css "^8.0.1" - popper.js "^1.16.1" - react-lifecycles-compat "^3.0.4" - react-popper "^1.3.7" - react-transition-group "^2.9.0" - resize-observer-polyfill "^1.5.1" - tslib "~1.13.0" - -"@blueprintjs/icons@^3.32.0": - version "3.32.0" - resolved "https://registry.yarnpkg.com/@blueprintjs/icons/-/icons-3.32.0.tgz#afc04116c55e4180ca552dafeeb4a5f013736568" - integrity sha512-xjw9Xz39VibgVI3fPfcjgtyk1EcICajkVTGA88fKFUsys/g1NvN3zJ/sUd6cROOL0YDaoNeuvMp7KFgs2AkXDw== - dependencies: - classnames "^2.2" - tslib "~1.13.0" - -"@blueprintjs/select@^3.15.0": - version "3.18.12" - resolved "https://registry.yarnpkg.com/@blueprintjs/select/-/select-3.18.12.tgz#efa377c5f31544fec9e577f29ae5b199c8ed93a7" - integrity sha512-tqRDKXZxmkUO8TtNFrcMeSNe26LbnGEk/X/OgT6c+Oh3RYQe87YSi92GNtfNn1gpoQkUpnuk1gA68iuX3fYGug== - dependencies: - "@blueprintjs/core" "^3.53.0" - classnames "^2.2" - tslib "~1.13.0" - -"@fortawesome/fontawesome-free@^5.12.0": - version "5.15.4" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" - integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== - -"@hypnosphi/create-react-context@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" - integrity sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A== - dependencies: - gud "^1.0.0" - warning "^4.0.3" - -"@jupyter/ydoc@~0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@jupyter/ydoc/-/ydoc-0.2.3.tgz#468a88d0250c5d59800a5cc15a33df211b4b2141" - integrity sha512-mwmlzOYXr4StXL1ijrSkt6+Bu4cF5nZQAep2zULa5IDe/PVDBqDtMrLqZyKQOgB3IT/sLJidU1P3wTdb8bwmww== - dependencies: - "@jupyterlab/nbformat" "^3.0.0 || ^4.0.0-alpha.15" - "@lumino/coreutils" "^1.11.0 || ^2.0.0-alpha.6" - "@lumino/disposable" "^1.10.0 || ^2.0.0-alpha.6" - "@lumino/signaling" "^1.10.0 || ^2.0.0-alpha.6" - y-protocols "^1.0.5" - yjs "^13.5.40" - -"@jupyterlab/application@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-3.6.3.tgz#7e199f77a4536bc7429fbecf9ba1850f51d9de52" - integrity sha512-G0tR6sUSCuHB8vGQnaB5lfihKNJVHtqYNoMlsZYF9rYpZEhW1TRD4uE5rg4RfDDR+GghjckQlP3rRNB2Vn4tMA== - dependencies: - "@fortawesome/fontawesome-free" "^5.12.0" - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/docregistry" "^3.6.3" - "@jupyterlab/rendermime" "^3.6.3" - "@jupyterlab/rendermime-interfaces" "^3.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/statedb" "^3.6.3" - "@jupyterlab/translation" "^3.6.3" - "@jupyterlab/ui-components" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/application" "^1.31.4" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - -"@jupyterlab/apputils@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-3.6.3.tgz#bc37683142b281e21d22a2f4698634563658298e" - integrity sha512-um2Aaa5fOUwHFpAqKTDA+MFpnAldzOILIi5QsKOWRxiJA2W8x+hlg5HvHbq+eSWuWEU3ah15M7htzBcL3g9d4Q== - dependencies: - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/observables" "^4.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/settingregistry" "^3.6.3" - "@jupyterlab/statedb" "^3.6.3" - "@jupyterlab/translation" "^3.6.3" - "@jupyterlab/ui-components" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/domutils" "^1.8.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - "@types/react" "^17.0.0" - react "^17.0.1" - react-dom "^17.0.1" - sanitize-html "~2.7.3" - url "^0.11.0" - -"@jupyterlab/attachments@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/attachments/-/attachments-3.6.3.tgz#f2e52c3518d3f84cb7a7cc7c8a113f49dfdde4f1" - integrity sha512-ZYDJjcoExmojsGkX5f1WVFfW39XJcb7CtfzFcNz3AbytebRK13S1xqCRlef/TFW+XT6BG7hjMSJlpW3GdkCV1Q== - dependencies: - "@jupyterlab/nbformat" "^3.6.3" - "@jupyterlab/observables" "^4.6.3" - "@jupyterlab/rendermime" "^3.6.3" - "@jupyterlab/rendermime-interfaces" "^3.6.3" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - -"@jupyterlab/cells@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/cells/-/cells-3.6.3.tgz#ac8191f99923a004211725435d25280347794cff" - integrity sha512-o3Uydof6bZ6HGSRgSm6isuAhaqYVmv+ozsmADYNmIGbwwwC+eb391Cv+rC3kuPZX/+2UhhO6s7fqFxW8aHUDkg== - dependencies: - "@jupyter/ydoc" "~0.2.3" - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/attachments" "^3.6.3" - "@jupyterlab/codeeditor" "^3.6.3" - "@jupyterlab/codemirror" "^3.6.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/filebrowser" "^3.6.3" - "@jupyterlab/nbformat" "^3.6.3" - "@jupyterlab/observables" "^4.6.3" - "@jupyterlab/outputarea" "^3.6.3" - "@jupyterlab/rendermime" "^3.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/ui-components" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - marked "^4.0.17" - react "^17.0.1" - -"@jupyterlab/codeeditor@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-3.6.3.tgz#a889c1821001888af7b60f66b1ee91e15797c0bb" - integrity sha512-SnVo5KDhyRkK/o1SDRX9nehLEAMaOBFf+GUx2jeXBTfr6wTKcwDBnJAUwlOfncwRlMV79aUIqTIcS861FSXDyA== - dependencies: - "@jupyter/ydoc" "~0.2.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/nbformat" "^3.6.3" - "@jupyterlab/observables" "^4.6.3" - "@jupyterlab/translation" "^3.6.3" - "@jupyterlab/ui-components" "^3.6.3" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - -"@jupyterlab/codemirror@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-3.6.3.tgz#7cb19faae58d4fc26bc37064f029c4b17098c20a" - integrity sha512-VU5bInzSqsyPGZkEd/w6HtJ9PSw7U5twoyrQSpSM+E2SEYWskaBZOHJf8XNunVoRRKwSvDLyxSs07Ot6zUlA0w== - dependencies: - "@jupyter/ydoc" "~0.2.3" - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/codeeditor" "^3.6.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/nbformat" "^3.6.3" - "@jupyterlab/observables" "^4.6.3" - "@jupyterlab/statusbar" "^3.6.3" - "@jupyterlab/translation" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - codemirror "~5.61.0" - react "^17.0.1" - y-codemirror "^3.0.1" - -"@jupyterlab/coreutils@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-5.6.3.tgz#3b0b5d481b14596158b560336833c89be509e84e" - integrity sha512-jRVTpwGzP9wBNYuaZTip89FS1qbeSYrEO2qdNVdW2rs0mQHcIlu3Fkv5muMFmKYGi0XHhG3UhZiWQ7qiPw2svQ== - dependencies: - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - minimist "~1.2.0" - moment "^2.24.0" - path-browserify "^1.0.0" - url-parse "~1.5.1" - -"@jupyterlab/docmanager@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/docmanager/-/docmanager-3.6.3.tgz#df2c5b45c5e9b38e2a48eb703ff5e3a9b4b7860c" - integrity sha512-4d5zGE3SGbg58wsFJtyskUxK7dEvl8d5Wh90hTlmsFNmr+nh5duTWcqTQ/a+d76YxYbGhH5vqOsNm5ORZq4Umw== - dependencies: - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/docprovider" "^3.6.3" - "@jupyterlab/docregistry" "^3.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/statusbar" "^3.6.3" - "@jupyterlab/translation" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - react "^17.0.1" - -"@jupyterlab/docprovider@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/docprovider/-/docprovider-3.6.3.tgz#90fbf07214b6c3e98055787fc351a68e9d83470c" - integrity sha512-M5IoyykDpWnUFNePHz3+fi/RNvV92UNbQGfAvsaCMSn+fl48rD4rHB9EZGceOisb3m1U+E4SntKYI3pl49yUEg== - dependencies: - "@jupyter/ydoc" "~0.2.3" - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/translation" "^3.6.3" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - y-protocols "^1.0.5" - y-websocket "^1.4.6" - -"@jupyterlab/docregistry@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-3.6.3.tgz#4a03fbb704449bda7a94df7a4bd63078c11aef58" - integrity sha512-unDMrtCSGKPqX9uvYCkI7zGTvskuC9odAPIHPsYSVMcHL/o5M7lQkHmRZCoSIezfe5OvPGXbYT2boQrBKXqCFw== - dependencies: - "@jupyter/ydoc" "~0.2.3" - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/codeeditor" "^3.6.3" - "@jupyterlab/codemirror" "^3.6.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/docprovider" "^3.6.3" - "@jupyterlab/observables" "^4.6.3" - "@jupyterlab/rendermime" "^3.6.3" - "@jupyterlab/rendermime-interfaces" "^3.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/translation" "^3.6.3" - "@jupyterlab/ui-components" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - -"@jupyterlab/filebrowser@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/filebrowser/-/filebrowser-3.6.3.tgz#169b880e19a8686f9a669a750027c2817b4b6cef" - integrity sha512-Qu+Mtx3d0QY7qCMIxg5nQtkQYh+kZ2kGO7tgS+yfKjo0cluPsxo+Zr56KtJU6zyDYjylVCtLYIK2RflwRKhdng== - dependencies: - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/docmanager" "^3.6.3" - "@jupyterlab/docregistry" "^3.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/statedb" "^3.6.3" - "@jupyterlab/statusbar" "^3.6.3" - "@jupyterlab/translation" "^3.6.3" - "@jupyterlab/ui-components" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - react "^17.0.1" - -"@jupyterlab/galata@^4.5.3": - version "4.5.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/galata/-/galata-4.5.3.tgz#272e72fc3bfdff1c3bcdd836457d8383dc553063" - integrity sha512-KtKaj+6JSIQrzpGkmO4h+Jgk5L+DABb2AlZ05TDGHduOJDSzrkAb341/dVEUYRt68gC7D1Pm8BukeQ5h8mO4Mg== - dependencies: - "@jupyterlab/application" "^3.6.3" - "@jupyterlab/cells" "^3.6.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/docmanager" "^3.6.3" - "@jupyterlab/nbformat" "^3.6.3" - "@jupyterlab/notebook" "^3.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/settingregistry" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@playwright/test" "^1.16.2" - "@stdlib/stats" "^0.0.13" - fs-extra "^9.0.1" - http-server "^13.0.0" - json5 "^2.1.1" - node-fetch "^2.6.0" - path "~0.12.7" - systeminformation "^5.8.6" - vega "^5.20.0" - vega-lite "^5.1.0" - vega-statistics "^1.7.9" - -"@jupyterlab/nbformat@^3.0.0 || ^4.0.0-alpha.15": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/nbformat/-/nbformat-3.6.2.tgz#fc51917e04c2671c8929d38980795a4928f14282" - integrity sha512-I4B4jo5Vnlfr94Nzc82wt8OYYeGvNAp6NPRjUWuUDdoUDKE6V2Wz+N3HCf9atLBy0Ervc8rrDqpE18eJLUCUGg== - dependencies: - "@lumino/coreutils" "^1.11.0" - -"@jupyterlab/nbformat@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/nbformat/-/nbformat-3.6.3.tgz#8520338e3679cbe8ce2ea8eb5a9b816f8b774ad3" - integrity sha512-0qJLa4dtOmu9EmHFeM7gaZi4qheovIPc9ZrgGGRuG0obajs4YYlvh4MQvCSgpVhme4AuBfGlcfzhlx+Gbzr5Xw== - dependencies: - "@lumino/coreutils" "^1.11.0" - -"@jupyterlab/notebook@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/notebook/-/notebook-3.6.3.tgz#1584be72184d67d59291e2b22f55bc257afde436" - integrity sha512-id1KD5/9IDPr/IZFCl/YX4Vc+Q198LZshhFNEcVJZcRdjD7Vh+LGvWcLOh80OAv86J4XSTTAsp3gHPr4iSwPDg== - dependencies: - "@jupyter/ydoc" "~0.2.3" - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/cells" "^3.6.3" - "@jupyterlab/codeeditor" "^3.6.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/docregistry" "^3.6.3" - "@jupyterlab/nbformat" "^3.6.3" - "@jupyterlab/observables" "^4.6.3" - "@jupyterlab/rendermime" "^3.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/settingregistry" "^3.6.3" - "@jupyterlab/statusbar" "^3.6.3" - "@jupyterlab/translation" "^3.6.3" - "@jupyterlab/ui-components" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - react "^17.0.1" - -"@jupyterlab/observables@^4.6.3": - version "4.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-4.6.3.tgz#49a9ca49fbda7428abbd1bfb8a4006ecd406c18d" - integrity sha512-CvQoL+9WHXOy/CXp/PQLi4c5iZVJ4psz11+GrycDDinX1AdVQ8a43OLTC0gxWl3Tk2C8ZvAi1sgn4FS68E1ACQ== - dependencies: - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - -"@jupyterlab/outputarea@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/outputarea/-/outputarea-3.6.3.tgz#acf7a604eb352109d096d2a9fdd1fbbddbf80af1" - integrity sha512-SSmkDWS8MhdXl7+rQoLu/5wJBKTq1YEkxlQcKh1Z0VN4VjYDCA/bKFGjOmKN7wMmoVP/zRmWvUwl/DLJCHx/Tw== - dependencies: - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/nbformat" "^3.6.3" - "@jupyterlab/observables" "^4.6.3" - "@jupyterlab/rendermime" "^3.6.3" - "@jupyterlab/rendermime-interfaces" "^3.6.3" - "@jupyterlab/services" "^6.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - resize-observer-polyfill "^1.5.1" - -"@jupyterlab/rendermime-interfaces@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.6.3.tgz#80009705d5ded65a4b27c4b826b295f40f126902" - integrity sha512-VHZVnqB0K1nmoQMOhFGHwvSYMQmxqcOC3wWDRFeUOv8S+tejTYfbrKXPOZJvhdGB52Jn8XNIesXOuNpLhl4HmQ== - dependencies: - "@jupyterlab/translation" "^3.6.3" - "@lumino/coreutils" "^1.11.0" - "@lumino/widgets" "^1.37.2" - -"@jupyterlab/rendermime@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-3.6.3.tgz#48d83c70493b0356d4dac6d89a863d8a5a84f68e" - integrity sha512-w3e38OddJin9fbfe7EWsKiiup/0ayvHPrAsacde8PqGLvi/sLeAXT98PqihsKt8EAlOgXSkSO0Ivjbd0JzgGgA== - dependencies: - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/codemirror" "^3.6.3" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/nbformat" "^3.6.3" - "@jupyterlab/observables" "^4.6.3" - "@jupyterlab/rendermime-interfaces" "^3.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/translation" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - lodash.escape "^4.0.1" - marked "^4.0.17" - -"@jupyterlab/services@^6.6.3": - version "6.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-6.6.3.tgz#303938e5dc5aebce7a86324a64ed89c25c61c9e7" - integrity sha512-BxEOMRl9X18T5wY7iV6ZJhARnibFghpD3OruqeSbnGdbRv6XJi8prsRbCQQ6Mf9agvf81B20KmDvYKikPHC0xQ== - dependencies: - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/nbformat" "^3.6.3" - "@jupyterlab/observables" "^4.6.3" - "@jupyterlab/settingregistry" "^3.6.3" - "@jupyterlab/statedb" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - node-fetch "^2.6.0" - ws "^7.4.6" - -"@jupyterlab/settingregistry@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/settingregistry/-/settingregistry-3.6.3.tgz#642f8b6449d626821ef13a7e778ae716fa8331c9" - integrity sha512-pnzIge0ZC8V63R97HiNroJ0eaPM0DN6x65SStyLuv/K8Qez4XqpOdc0Wfell5ri5mxMvm1qKekuFeTikqSXQKQ== - dependencies: - "@jupyterlab/statedb" "^3.6.3" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - ajv "^6.12.3" - json5 "^2.1.1" - -"@jupyterlab/statedb@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/statedb/-/statedb-3.6.3.tgz#6ba2166af9232c9a185cf0077cf1272f24cc9a69" - integrity sha512-A36L+0NN8f0WOES2GdtZjp9uFuC7IBjhKiO/RlKRX5AFjNxoJ9oO3PZtoxJQYPnGBljMqVdRa+m9aYEfvKhYyQ== - dependencies: - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - -"@jupyterlab/statusbar@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/statusbar/-/statusbar-3.6.3.tgz#29c24427a2d6b205349b94583de0ccb8b9435d88" - integrity sha512-m59NLR0Zghm53PU6hDzRF4XVORnJx/YRx0svcjj/TGLk8LSffpQbUDBy24dl3tOuChk4D5cCdgeDH1X30TzCaA== - dependencies: - "@jupyterlab/apputils" "^3.6.3" - "@jupyterlab/codeeditor" "^3.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/translation" "^3.6.3" - "@jupyterlab/ui-components" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - csstype "~3.0.3" - react "^17.0.1" - typestyle "^2.0.4" - -"@jupyterlab/translation@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/translation/-/translation-3.6.3.tgz#3fd95f726316762bc1799a7b7be0243d5465932a" - integrity sha512-m+wwBv/hiN5Y6Sb7Ij150ZhPXZdhN5wI8CT3afnzARwKr2Aww5AIURO3upmMwnKaPVQTrWqsS3+7bZS/21JuJA== - dependencies: - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/services" "^6.6.3" - "@jupyterlab/statedb" "^3.6.3" - "@lumino/coreutils" "^1.11.0" - -"@jupyterlab/ui-components@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/ui-components/-/ui-components-3.6.3.tgz#36555036b383c5d80346f409a7a168d13c9d8c85" - integrity sha512-XzseUo2IXclPlYcGxCIz8evjWF+dCBMmbJlvoE5OF29BYBvI5N/DUaTem8bHN5kmQwHIXX6BImHu7rbC9Xjl6w== - dependencies: - "@blueprintjs/core" "^3.36.0" - "@blueprintjs/select" "^3.15.0" - "@jupyterlab/coreutils" "^5.6.3" - "@jupyterlab/translation" "^3.6.3" - "@lumino/algorithm" "^1.9.0" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - "@rjsf/core" "^3.1.0" - react "^17.0.1" - react-dom "^17.0.1" - typestyle "^2.0.4" - -"@lumino/algorithm@^1.9.0", "@lumino/algorithm@^1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@lumino/algorithm/-/algorithm-1.9.2.tgz#b95e6419aed58ff6b863a51bfb4add0f795141d3" - integrity sha512-Z06lp/yuhz8CtIir3PNTGnuk7909eXt4ukJsCzChsGuot2l5Fbs96RJ/FOHgwCedaX74CtxPjXHXoszFbUA+4A== - -"@lumino/algorithm@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@lumino/algorithm/-/algorithm-2.0.0.tgz#f36e4b6bf6d2b9bde66dc3162afc9a0d2ef47530" - integrity sha512-SwM/8U1zlMWMJj00wTCThdTUit9zap2Xghuo4uUxvZ+mfog5b1UIk2j1dP8TPpzEXHCDPEb85s2/ERo1tee3Dw== - -"@lumino/application@^1.31.4": - version "1.31.4" - resolved "https://registry.yarnpkg.com/@lumino/application/-/application-1.31.4.tgz#b804fcc46fb77deb41aee94c48bea990f735d6b9" - integrity sha512-dOSsDJ1tXOxC3fnSHvtDQK5RcICLEVPtO19HeCGwurb5W2ZZ55SZT2b5jZu6V/v8lGdtkNbr1RJltRpJRSRb/A== - dependencies: - "@lumino/commands" "^1.21.1" - "@lumino/coreutils" "^1.12.1" - "@lumino/widgets" "^1.37.2" - -"@lumino/collections@^1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@lumino/collections/-/collections-1.9.3.tgz#370dc2d50aa91371288a4f7376bea5a3191fc5dc" - integrity sha512-2i2Wf1xnfTgEgdyKEpqM16bcYRIhUOGCDzaVCEZACVG9R1CgYwOe3zfn71slBQOVSjjRgwYrgLXu4MBpt6YK+g== - dependencies: - "@lumino/algorithm" "^1.9.2" - -"@lumino/commands@^1.19.0", "@lumino/commands@^1.21.1": - version "1.21.1" - resolved "https://registry.yarnpkg.com/@lumino/commands/-/commands-1.21.1.tgz#eda8b3cf5ef73b9c8ce93b3b5cf66bb053df2a76" - integrity sha512-d1zJmwz5bHU0BM/Rl3tRdZ7/WgXnFB0bM7x7Bf0XDlmX++jnU9k0j3mh6/5JqCGLmIApKCRwVqSaV7jPmSJlcQ== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - "@lumino/domutils" "^1.8.2" - "@lumino/keyboard" "^1.8.2" - "@lumino/signaling" "^1.11.1" - "@lumino/virtualdom" "^1.14.3" - -"@lumino/coreutils@^1.11.0", "@lumino/coreutils@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@lumino/coreutils/-/coreutils-1.12.1.tgz#79860c9937483ddf6cda87f6c2b9da8eb1a5d768" - integrity sha512-JLu3nTHzJk9N8ohZ85u75YxemMrmDzJdNgZztfP7F7T7mxND3YVNCkJG35a6aJ7edu1sIgCjBxOvV+hv27iYvQ== - -"@lumino/coreutils@^1.11.0 || ^2.0.0-alpha.6", "@lumino/coreutils@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@lumino/coreutils/-/coreutils-2.0.0.tgz#f7a82e616156bda83197ee4e176810af6799a27b" - integrity sha512-eMPssdjM/qYsX7AwX4gWI07ijzxDFyM7i8dT35YY7P6r0OeqIzmVruu/3RJhHfKoVJ/fINlS9B8EsOC81GMIGA== - -"@lumino/disposable@^1.10.0", "@lumino/disposable@^1.10.4": - version "1.10.4" - resolved "https://registry.yarnpkg.com/@lumino/disposable/-/disposable-1.10.4.tgz#73b452044fecf988d7fa73fac9451b1a7f987323" - integrity sha512-4ZxyYcyzUS+ZeB2KAH9oAH3w0DUUceiVr+FIZHZ2TAYGWZI/85WlqJtfm0xjwEpCwLLW1TDqJrISuZu3iMmVMA== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/signaling" "^1.11.1" - -"@lumino/disposable@^1.10.0 || ^2.0.0-alpha.6": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@lumino/disposable/-/disposable-2.0.0.tgz#6ad4927aaee03b8c55b870a8466fca5b759d5a1e" - integrity sha512-2PcwxbKU1xYd02wWCsk5F/Ufh/tbNAMb+zXJEOGcRPrgOihkIz3FEDtbhOVGuGw8FtYlisKIs1m+pq37LUHL6A== - dependencies: - "@lumino/signaling" "^2.0.0" - -"@lumino/domutils@^1.8.0", "@lumino/domutils@^1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@lumino/domutils/-/domutils-1.8.2.tgz#d15cdbae12bea52852bbc13c4629360f9f05b7f5" - integrity sha512-QIpMfkPJrs4GrWBuJf2Sn1fpyVPmvqUUAeD8xAQo8+4V5JAT0vUDLxZ9HijefMgNCi3+Bs8Z3lQwRCrz+cFP1A== - -"@lumino/dragdrop@^1.13.0", "@lumino/dragdrop@^1.14.5": - version "1.14.5" - resolved "https://registry.yarnpkg.com/@lumino/dragdrop/-/dragdrop-1.14.5.tgz#1db76c8a01f74cb1b0428db6234e820bb58b93ba" - integrity sha512-LC5xB82+xGF8hFyl716TMpV32OIMIMl+s3RU1PaqDkD6B7PkgiVk6NkJ4X9/GcEvl2igkvlGQt/3L7qxDAJNxw== - dependencies: - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - -"@lumino/keyboard@^1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@lumino/keyboard/-/keyboard-1.8.2.tgz#714dbe671f0718f516d1ec23188b31a9ccd82fb2" - integrity sha512-Dy+XqQ1wXbcnuYtjys5A0pAqf4SpAFl9NY6owyIhXAo0Va7w3LYp3jgiP1xAaBAwMuUppiUAfrbjrysZuZ625g== - -"@lumino/messaging@^1.10.0", "@lumino/messaging@^1.10.3": - version "1.10.3" - resolved "https://registry.yarnpkg.com/@lumino/messaging/-/messaging-1.10.3.tgz#b6227bdfc178a8542571625ecb68063691b6af3c" - integrity sha512-F/KOwMCdqvdEG8CYAJcBSadzp6aI7a47Fr60zAKGqZATSRRRV41q53iXU7HjFPqQqQIvdn9Z7J32rBEAyQAzww== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/collections" "^1.9.3" - -"@lumino/polling@^1.9.0": - version "1.11.4" - resolved "https://registry.yarnpkg.com/@lumino/polling/-/polling-1.11.4.tgz#ddfe47da5b41af4cfa474898542c099e445c0e6c" - integrity sha512-yC7JLssj3mqVK6TsYj7dg4AG0rcsC42YtpoDLtz9yzO84Q5flQUfmjAPQB6oPA6wZOlISs3iasF+uO2w1ls5jg== - dependencies: - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - "@lumino/signaling" "^1.11.1" - -"@lumino/properties@^1.8.0", "@lumino/properties@^1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@lumino/properties/-/properties-1.8.2.tgz#91131f2ca91a902faa138771eb63341db78fc0fd" - integrity sha512-EkjI9Cw8R0U+xC9HxdFSu7X1tz1H1vKu20cGvJ2gU+CXlMB1DvoYJCYxCThByHZ+kURTAap4SE5x8HvKwNPbig== - -"@lumino/signaling@^1.10.0", "@lumino/signaling@^1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@lumino/signaling/-/signaling-1.11.1.tgz#438f447a1b644fd286549804f9851b5aec9679a2" - integrity sha512-YCUmgw08VoyMN5KxzqPO3KMx+cwdPv28tAN06C0K7Q/dQf+oufb1XocuhZb5selTrTmmuXeizaYxgLIQGdS1fA== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/properties" "^1.8.2" - -"@lumino/signaling@^1.10.0 || ^2.0.0-alpha.6", "@lumino/signaling@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@lumino/signaling/-/signaling-2.0.0.tgz#56ad85d966719adde7532c2888f3c73562de5c86" - integrity sha512-v5VRG4asmrVV5yy9rrpZgS5s9djkLbnmI60dVFXIbMWKyNUziVaUB9SkMzsCOOF6b9IKxXVdrMxjcieX7F9qfA== - dependencies: - "@lumino/algorithm" "^2.0.0" - "@lumino/coreutils" "^2.0.0" - -"@lumino/virtualdom@^1.14.0", "@lumino/virtualdom@^1.14.3": - version "1.14.3" - resolved "https://registry.yarnpkg.com/@lumino/virtualdom/-/virtualdom-1.14.3.tgz#e490c36ff506d877cf45771d6968e3e26a8919fd" - integrity sha512-5joUC1yuxeXbpfbSBm/OR8Mu9HoTo6PDX0RKqzlJ9o97iml7zayFN/ynzcxScKGQAo9iaXOY8uVIvGUT8FnsGw== - dependencies: - "@lumino/algorithm" "^1.9.2" - -"@lumino/widgets@^1.37.2": - version "1.37.2" - resolved "https://registry.yarnpkg.com/@lumino/widgets/-/widgets-1.37.2.tgz#b408fae221ecec2f1b028607782fbe1e82588bce" - integrity sha512-NHKu1NBDo6ETBDoNrqSkornfUCwc8EFFzw6+LWBfYVxn2PIwciq2SdiJGEyNqL+0h/A9eVKb5ui5z4cwpRekmQ== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/commands" "^1.21.1" - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - "@lumino/domutils" "^1.8.2" - "@lumino/dragdrop" "^1.14.5" - "@lumino/keyboard" "^1.8.2" - "@lumino/messaging" "^1.10.3" - "@lumino/properties" "^1.8.2" - "@lumino/signaling" "^1.11.1" - "@lumino/virtualdom" "^1.14.3" - -"@playwright/test@^1.16.2": - version "1.32.1" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.32.1.tgz#749c9791adb048c266277a39ba0f7e33fe593ffe" - integrity sha512-FTwjCuhlm1qHUGf4hWjfr64UMJD/z0hXYbk+O387Ioe6WdyZQ+0TBDAc6P+pHjx2xCv1VYNgrKbYrNixFWy4Dg== - dependencies: - "@types/node" "*" - playwright-core "1.32.1" - optionalDependencies: - fsevents "2.3.2" - -"@rjsf/core@^3.1.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@rjsf/core/-/core-3.2.1.tgz#8a7b24c9a6f01f0ecb093fdfc777172c12b1b009" - integrity sha512-dk8ihvxFbcuIwU7G+HiJbFgwyIvaumPt5g5zfnuC26mwTUPlaDGFXKK2yITp8tJ3+hcwS5zEXtAN9wUkfuM4jA== - dependencies: - "@types/json-schema" "^7.0.7" - ajv "^6.7.0" - core-js-pure "^3.6.5" - json-schema-merge-allof "^0.6.0" - jsonpointer "^5.0.0" - lodash "^4.17.15" - nanoid "^3.1.23" - prop-types "^15.7.2" - react-is "^16.9.0" - -"@stdlib/array@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/array/-/array-0.0.12.tgz#12f40ab95bb36d424cdad991f29fc3cb491ee29e" - integrity sha512-nDksiuvRC1dSTHrf5yOGQmlRwAzSKV8MdFQwFSvLbZGGhi5Y4hExqea5HloLgNVouVs8lnAFi2oubSM4Mc7YAg== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/blas" "^0.0.x" - "@stdlib/complex" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/assert@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/assert/-/assert-0.0.12.tgz#1648c9016e5041291f55a6464abcc4069c5103ce" - integrity sha512-38FxFf+ZoQZbdc+m09UsWtaCmzd/2e7im0JOaaFYE7icmRfm+4KiE9BRvBT4tIn7ioLB2f9PsBicKjIsf+tY1w== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/complex" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/ndarray" "^0.0.x" - "@stdlib/number" "^0.0.x" - "@stdlib/os" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/regexp" "^0.0.x" - "@stdlib/streams" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/bigint@^0.0.x": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@stdlib/bigint/-/bigint-0.0.11.tgz#c416a1d727001c55f4897e6424124199d638f2fd" - integrity sha512-uz0aYDLABAYyqxaCSHYbUt0yPkXYUCR7TrVvHN+UUD3i8FZ02ZKcLO+faKisDyxKEoSFTNtn3Ro8Ir5ebOlVXQ== - dependencies: - "@stdlib/utils" "^0.0.x" - -"@stdlib/blas@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/blas/-/blas-0.0.12.tgz#7e93e42b4621fc6903bf63264f045047333536c2" - integrity sha512-nWY749bWceuoWQ7gz977blCwR7lyQ/rsIXVO4b600h+NFpeA2i/ea7MYC680utIbeu2cnDWHdglBPoK535VAzA== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/number" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/buffer@^0.0.x": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@stdlib/buffer/-/buffer-0.0.11.tgz#6137b00845e6c905181cc7ebfae9f7e47c01b0ce" - integrity sha512-Jeie5eDDa1tVuRcuU+cBXI/oOXSmMxUUccZpqXzgYe0IO8QSNtNxv9mUTzJk/m5wH+lmLoDvNxzPpOH9TODjJg== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/cli@^0.0.x": - version "0.0.10" - resolved "https://registry.yarnpkg.com/@stdlib/cli/-/cli-0.0.10.tgz#28e2fbe6865d7f5cd15b7dc5846c99bd3b91674f" - integrity sha512-OITGaxG46kwK799+NuOd/+ccosJ9koVuQBC610DDJv0ZJf8mD7sbjGXrmue9C4EOh8MP7Vm/6HN14BojX8oTCg== - dependencies: - "@stdlib/utils" "^0.0.x" - minimist "^1.2.0" - -"@stdlib/complex@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/complex/-/complex-0.0.12.tgz#3afbc190cd0a9b37fc7c6e508c3aa9fda9106944" - integrity sha512-UbZBdaUxT2G+lsTIrVlRZwx2IRY6GXnVILggeejsIVxHSuK+oTyapfetcAv0FJFLP+Rrr+ZzrN4b9G3hBw6NHA== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/constants@^0.0.x": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@stdlib/constants/-/constants-0.0.11.tgz#78cd56d6c2982b30264843c3d75bde7125e90cd2" - integrity sha512-cWKy0L9hXHUQTvFzdPkTvZnn/5Pjv7H4UwY0WC1rLt+A5CxFDJKjvnIi9ypSzJS3CAiGl1ZaHCdadoqXhNdkUg== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/number" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/fs@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/fs/-/fs-0.0.12.tgz#662365fd5846a51f075724b4f2888ae88441b70d" - integrity sha512-zcDLbt39EEM3M3wJW6luChS53B8T+TMJkjs2526UpKJ71O0/0adR57cI7PfCpkMd33d05uM7GM+leEj4eks4Cw== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/utils" "^0.0.x" - debug "^2.6.9" - -"@stdlib/math@^0.0.x": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@stdlib/math/-/math-0.0.11.tgz#eb6638bc03a20fbd6727dd5b977ee0170bda4649" - integrity sha512-qI78sR1QqGjHj8k/aAqkZ51Su2fyBvaR/jMKQqcB/ML8bpYpf+QGlGvTty5Qdru/wpqds4kVFOVbWGcNFIV2+Q== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/ndarray" "^0.0.x" - "@stdlib/number" "^0.0.x" - "@stdlib/strided" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - debug "^2.6.9" - -"@stdlib/ndarray@^0.0.x": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@stdlib/ndarray/-/ndarray-0.0.13.tgz#2e8fc645e10f56a645a0ab81598808c0e8f43b82" - integrity sha512-Z+U9KJP4U2HWrLtuAXSPvhNetAdqaNLMcliR6S/fz+VPlFDeymRK7omRFMgVQ+1zcAvIgKZGJxpLC3vjiPUYEw== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/bigint" "^0.0.x" - "@stdlib/buffer" "^0.0.x" - "@stdlib/complex" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/number" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/nlp@^0.0.x": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@stdlib/nlp/-/nlp-0.0.11.tgz#532ec0f7267b8d639e4c20c6de864e8de8a09054" - integrity sha512-D9avYWANm0Db2W7RpzdSdi5GxRYALGAqUrNnRnnKIO6sMEfr/DvONoAbWruda4QyvSC+0MJNwcEn7+PHhRwYhw== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/random" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/number@^0.0.x": - version "0.0.10" - resolved "https://registry.yarnpkg.com/@stdlib/number/-/number-0.0.10.tgz#4030ad8fc3fac19a9afb415c443cee6deea0e65c" - integrity sha512-RyfoP9MlnX4kccvg8qv7vYQPbLdzfS1Mnp/prGOoWhvMG3pyBwFAan34kwFb5IS/zHC3W5EmrgXCV2QWyLg/Kg== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/os" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/os@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/os/-/os-0.0.12.tgz#08bbf013c62a7153099fa9cbac086ca1349a4677" - integrity sha512-O7lklZ/9XEzoCmYvzjPh7jrFWkbpOSHGI71ve3dkSvBy5tyiSL3TtivfKsIC+9ZxuEJZ3d3lIjc9e+yz4HVbqQ== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/process@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/process/-/process-0.0.12.tgz#123325079d89a32f4212f72fb694f8fe3614cf18" - integrity sha512-P0X0TMvkissBE1Wr877Avi2/AxmP7X5Toa6GatHbpJdDg6jQmN4SgPd+NZNp98YtZUyk478c8XSIzMr1krQ20g== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/buffer" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/streams" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/random@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/random/-/random-0.0.12.tgz#e819c3abd602ed5559ba800dba751e49c633ff85" - integrity sha512-c5yND4Ahnm9Jx0I+jsKhn4Yrz10D53ALSrIe3PG1qIz3kNFcIPnmvCuNGd+3V4ch4Mbrez55Y8z/ZC5RJh4vJQ== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/blas" "^0.0.x" - "@stdlib/buffer" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/stats" "^0.0.x" - "@stdlib/streams" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - debug "^2.6.9" - readable-stream "^2.1.4" - -"@stdlib/regexp@^0.0.x": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@stdlib/regexp/-/regexp-0.0.13.tgz#80b98361dc7a441b47bc3fa964bb0c826759e971" - integrity sha512-3JT5ZIoq/1nXY+dY+QtkU8/m7oWDeekyItEEXMx9c/AOf0ph8fmvTUGMDNfUq0RetcznFe3b66kFz6Zt4XHviA== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/stats@^0.0.13", "@stdlib/stats@^0.0.x": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@stdlib/stats/-/stats-0.0.13.tgz#87c973f385379d794707c7b5196a173dba8b07e1" - integrity sha512-hm+t32dKbx/L7+7WlQ1o4NDEzV0J4QSnwFBCsIMIAO8+VPxTZ4FxyNERl4oKlS3hZZe4AVKjoOVhBDtgEWrS4g== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/blas" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/ndarray" "^0.0.x" - "@stdlib/random" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/streams@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/streams/-/streams-0.0.12.tgz#07f5ceae5852590afad8e1cb7ce94174becc8739" - integrity sha512-YLUlXwjJNknHp92IkJUdvn5jEQjDckpawKhDLLCoxyh3h5V+w/8+61SH7TMTfKx5lBxKJ8vvtchZh90mIJOAjQ== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/buffer" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - debug "^2.6.9" - readable-stream "^2.1.4" - -"@stdlib/strided@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/strided/-/strided-0.0.12.tgz#86ac48e660cb7f64a45cf07e80cbbfe58be21ae1" - integrity sha512-1NINP+Y7IJht34iri/bYLY7TVxrip51f6Z3qWxGHUCH33kvk5H5QqV+RsmFEGbbyoGtdeHrT2O+xA+7R2e3SNg== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/ndarray" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/string@^0.0.x": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@stdlib/string/-/string-0.0.13.tgz#37457ca49e8d1dff0e523c68f5673c655c79eb2d" - integrity sha512-nGMHi7Qk9LBW0+Y+e3pSePQEBqyWH7+7DjFR1APcbsYccJE0p4aCaQdhPhx9Tp7j3uRGBmqPFek8wpcvIuC+CQ== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/nlp" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/regexp" "^0.0.x" - "@stdlib/streams" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/symbol@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/symbol/-/symbol-0.0.12.tgz#b9f396b0bf269c2985bb7fe99810a8e26d7288c3" - integrity sha512-2IDhpzWVGeLHgsvIsX12RXvf78r7xBkc4QLoRUv3k7Cp61BisR1Ym1p0Tq9PbxT8fknlvLToh9n5RpmESi2d4w== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/time@^0.0.x": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@stdlib/time/-/time-0.0.14.tgz#ea6daa438b1d3b019b99f5091117ee4bcef55d60" - integrity sha512-1gMFCQTabMVIgww+k4g8HHHIhyy1tIlvwT8mC0BHW7Q7TzDAgobwL0bvor+lwvCb5LlDAvNQEpaRgVT99QWGeQ== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/types@^0.0.x": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@stdlib/types/-/types-0.0.13.tgz#4cf4666286294a48c589a37c2b0b48c9076128f9" - integrity sha512-8aPkDtaJM/XZENqhoj7BYuwENLGyxz1xfLIcf2zct7kLZMi0rODzks3n65LEMIR9Rh3rFDXlwc35XvzEkTpmZQ== - -"@stdlib/utils@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/utils/-/utils-0.0.12.tgz#670de5a7b253f04f11a4cba38f790e82393bcb46" - integrity sha512-+JhFpl6l7RSq/xGnbWRQ5dAL90h9ONj8MViqlb7teBZFtePZLMwoRA1wssypFcJ8SFMRWQn7lPmpYVUkGwRSOg== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/blas" "^0.0.x" - "@stdlib/buffer" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/os" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/random" "^0.0.x" - "@stdlib/regexp" "^0.0.x" - "@stdlib/streams" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/time" "^0.0.x" - "@stdlib/types" "^0.0.x" - debug "^2.6.9" - -"@types/clone@~2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/clone/-/clone-2.1.1.tgz#9b880d0ce9b1f209b5e0bd6d9caa38209db34024" - integrity sha512-BZIU34bSYye0j/BFcPraiDZ5ka6MJADjcDVELGf7glr9K+iE8NYVjFslJFVWzskSxkLLyCrSPScE82/UUoBSvg== - -"@types/dom4@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/dom4/-/dom4-2.0.2.tgz#6495303f049689ce936ed328a3e5ede9c51408ee" - integrity sha512-Rt4IC1T7xkCWa0OG1oSsPa0iqnxlDeQqKXZAHrQGLb7wFGncWm85MaxKUjAGejOrUynOgWlFi4c6S6IyJwoK4g== - -"@types/estree@^0.0.50": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== - -"@types/estree@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/geojson@^7946.0.10": - version "7946.0.10" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" - integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== - -"@types/json-schema@^7.0.7": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/node@*": - version "17.0.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.17.tgz#a8ddf6e0c2341718d74ee3dc413a13a042c45a0c" - integrity sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw== - -"@types/prop-types@*": - version "15.7.4" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== - -"@types/react@^17.0.0": - version "17.0.39" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.39.tgz#d0f4cde092502a6db00a1cded6e6bf2abb7633ce" - integrity sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug== - 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== - -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -ajv@^6.12.3, ajv@^6.7.0: - 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-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@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -array-flat-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz#1e3a4255be619dfbffbfd1d635c1cf357cd034e7" - integrity sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -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== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -basic-auth@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" - integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= - -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -call-bind@^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" - -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" - -classnames@^2.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -codemirror@~5.61.0: - version "5.61.1" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.61.1.tgz#ccfc8a43b8fcfb8b12e8e75b5ffde48d541406e0" - integrity sha512-+D1NZjAucuzE93vJGbAaXzvoBHwp9nJZWWWF9utjv25+5AZUiah6CIlfb4ikG4MoDsFsCG8niiJH5++OO2LgIQ== - -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.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== - -commander@2: - 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@7: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -compute-gcd@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/compute-gcd/-/compute-gcd-1.2.1.tgz#34d639f3825625e1357ce81f0e456a6249d8c77f" - integrity sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg== - dependencies: - validate.io-array "^1.0.3" - validate.io-function "^1.0.2" - validate.io-integer-array "^1.0.0" - -compute-lcm@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/compute-lcm/-/compute-lcm-1.1.2.tgz#9107c66b9dca28cefb22b4ab4545caac4034af23" - integrity sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ== - dependencies: - compute-gcd "^1.2.1" - validate.io-array "^1.0.3" - validate.io-function "^1.0.2" - validate.io-integer-array "^1.0.0" - -core-js-pure@^3.6.5: - version "3.29.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.29.1.tgz#1be6ca2b8772f6b4df7fc4621743286e676c6162" - integrity sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -corser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" - integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c= - -csstype@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" - integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== - -csstype@^3.0.2, csstype@~3.0.3: - version "3.0.10" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" - integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== - -"d3-array@1 - 3", "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3.2.2, d3-array@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.2.tgz#f8ac4705c5b06914a7e0025bbf8d5f1513f6a86e" - integrity sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ== - dependencies: - internmap "1 - 2" - -d3-array@2, d3-array@^2.3.0, d3-array@^2.7.1: - version "2.12.1" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.12.1.tgz#e20b41aafcdffdf5d50928004ececf815a465e81" - integrity sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ== - dependencies: - internmap "^1.0.0" - -"d3-color@1 - 2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e" - integrity sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ== - -"d3-color@1 - 3", d3-color@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" - integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== - -d3-delaunay@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.2.tgz#7fd3717ad0eade2fc9939f4260acfb503f984e92" - integrity sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ== - dependencies: - delaunator "5" - -"d3-dispatch@1 - 3": - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" - integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== - -d3-dsv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-2.0.0.tgz#b37b194b6df42da513a120d913ad1be22b5fe7c5" - integrity sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w== - dependencies: - commander "2" - iconv-lite "0.4" - rw "1" - -d3-dsv@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" - integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== - dependencies: - commander "7" - iconv-lite "0.6" - rw "1" - -d3-force@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4" - integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== - dependencies: - d3-dispatch "1 - 3" - d3-quadtree "1 - 3" - d3-timer "1 - 3" - -"d3-format@1 - 2", d3-format@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767" - integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA== - -"d3-format@1 - 3", d3-format@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" - integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== - -d3-geo-projection@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz#dc229e5ead78d31869a4e87cf1f45bd2716c48ca" - integrity sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg== - dependencies: - commander "7" - d3-array "1 - 3" - d3-geo "1.12.0 - 3" - -"d3-geo@1.12.0 - 3", d3-geo@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.0.tgz#74fd54e1f4cebd5185ac2039217a98d39b0a4c0e" - integrity sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA== - dependencies: - d3-array "2.5.0 - 3" - -d3-hierarchy@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6" - integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== - -"d3-interpolate@1.2.0 - 2", d3-interpolate@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" - integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ== - dependencies: - d3-color "1 - 2" - -"d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" - integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== - dependencies: - d3-color "1 - 3" - -"d3-path@1 - 2", d3-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-2.0.0.tgz#55d86ac131a0548adae241eebfb56b4582dd09d8" - integrity sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA== - -d3-path@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" - integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== - -"d3-quadtree@1 - 3": - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f" - integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== - -d3-scale@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.3.0.tgz#28c600b29f47e5b9cd2df9749c206727966203f3" - integrity sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ== - dependencies: - d3-array "^2.3.0" - d3-format "1 - 2" - d3-interpolate "1.2.0 - 2" - d3-time "^2.1.1" - d3-time-format "2 - 3" - -d3-scale@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" - integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== - dependencies: - d3-array "2.10.0 - 3" - d3-format "1 - 3" - d3-interpolate "1.2.0 - 3" - d3-time "2.1.1 - 3" - d3-time-format "2 - 4" - -d3-shape@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-2.1.0.tgz#3b6a82ccafbc45de55b57fcf956c584ded3b666f" - integrity sha512-PnjUqfM2PpskbSLTJvAzp2Wv4CZsnAgTfcVRTwW03QR3MkXF8Uo7B1y/lWkAsmbKwuecto++4NlsYcvYpXpTHA== - dependencies: - d3-path "1 - 2" - -d3-shape@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" - integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== - dependencies: - d3-path "^3.1.0" - -"d3-time-format@2 - 3", d3-time-format@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-3.0.0.tgz#df8056c83659e01f20ac5da5fdeae7c08d5f1bb6" - integrity sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag== - dependencies: - d3-time "1 - 2" - -"d3-time-format@2 - 4", d3-time-format@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" - integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== - dependencies: - d3-time "1 - 3" - -"d3-time@1 - 2", d3-time@^2.0.0, d3-time@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.1.1.tgz#e9d8a8a88691f4548e68ca085e5ff956724a6682" - integrity sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ== - dependencies: - d3-array "2" - -"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" - integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== - dependencies: - d3-array "2 - 3" - -"d3-timer@1 - 3", d3-timer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" - integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== - -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.1: - 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" - -deep-equal@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -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" - -delaunator@5: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b" - integrity sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw== - dependencies: - robust-predicates "^3.0.0" - -dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== - dependencies: - "@babel/runtime" "^7.1.2" - -dom-serializer@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" - integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom4@^2.1.5: - version "2.1.6" - resolved "https://registry.yarnpkg.com/dom4/-/dom4-2.1.6.tgz#c90df07134aa0dbd81ed4d6ba1237b36fc164770" - integrity sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA== - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" - integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== - dependencies: - domelementtype "^2.2.0" - -domutils@^2.5.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -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== - -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -errno@~0.1.1: - 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" - -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@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -fast-deep-equal@^3.1.1, fast-deep-equal@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@~2.1.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== - -follow-redirects@^1.0.0: - version "1.14.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" - integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== - -free-style@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/free-style/-/free-style-3.1.0.tgz#4e2996029534e6b1731611d843437b9e2f473f08" - integrity sha512-vJujYSIyT30iDoaoeigNAxX4yB1RUrh+N2ZMhIElMr3BvCuGXOw7XNJMEEJkDUeamK2Rnb/IKFGKRKlTWIGRWA== - -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" - -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== - -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.2: - 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" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== - -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== - -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.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -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@^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" - -he@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -htmlparser2@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-proxy@^1.18.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-server@^13.0.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/http-server/-/http-server-13.1.0.tgz#ef2ceb4efd08da87e93ac0f33727ecb9f3f4d629" - integrity sha512-MLqBMXeY/YN0FYMz4ifeOQCcg8pKj8YdmzX1pr/Vb2VrNnbxHN1s4K9BuZRVSyK/j3DQ8UVrrABb8m6EmFjWog== - dependencies: - basic-auth "^1.0.3" - chalk "^4.1.2" - corser "^2.0.1" - he "^1.1.0" - http-proxy "^1.18.0" - mime "^1.6.0" - minimist "^1.2.5" - opener "^1.5.1" - portfinder "^1.0.25" - secure-compare "3.0.1" - union "~0.5.0" - url-join "^2.0.5" - -iconv-lite@0.4: - 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" - -iconv-lite@0.6: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inherits@^2.0.3, inherits@^2.0.4, 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== - -"internmap@1 - 2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" - integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== - -internmap@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" - integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -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-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-regex@^1.0.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" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isomorphic.js@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.2.4.tgz#24ca374163ae54a7ce3b86ce63b701b91aa84969" - integrity sha512-Y4NjZceAwaPXctwsHgNsmfuPxR8lJ3f8X7QTAkhltrX4oGIv+eTlgHLXn4tWysC9zGTi929gapnPp+8F8cg7nA== - -"js-tokens@^3.0.0 || ^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== - -json-schema-compare@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/json-schema-compare/-/json-schema-compare-0.2.2.tgz#dd601508335a90c7f4cfadb6b2e397225c908e56" - integrity sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ== - dependencies: - lodash "^4.17.4" - -json-schema-merge-allof@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz#64d48820fec26b228db837475ce3338936bf59a5" - integrity sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ== - dependencies: - compute-lcm "^1.1.0" - json-schema-compare "^0.2.2" - lodash "^4.17.4" - -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-stringify-pretty-compact@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz#f71ef9d82ef16483a407869556588e91b681d9ab" - integrity sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA== - -json5@^2.1.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -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" - -jsonpointer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== - -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-js@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" - integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg== - dependencies: - abstract-leveldown "~6.2.3" - buffer "^5.5.0" - inherits "^2.0.3" - ltgt "^2.1.2" - -level-packager@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - -level@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-6.0.1.tgz#dc34c5edb81846a6de5079eac15706334b0d7cd6" - integrity sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw== - dependencies: - level-js "^5.0.0" - level-packager "^5.1.0" - leveldown "^5.4.0" - -leveldown@^5.4.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" - integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== - dependencies: - abstract-leveldown "~6.2.1" - napi-macros "~2.0.0" - node-gyp-build "~4.1.0" - -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -lib0@^0.2.31, lib0@^0.2.42: - version "0.2.43" - resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.43.tgz#1c2ed1fb2e9fe136e92abef7ca56875f2ee66b07" - integrity sha512-MJ1KLoz5p3gljIUBfdjjNuL/wlWHHK6+DrcIRhzSRLvtAu1XNdRtRGATYM51KSTI0P2nxJZFQM8rwCH6ga9KUw== - dependencies: - isomorphic.js "^0.2.4" - -lib0@^0.2.52, lib0@^0.2.72: - version "0.2.73" - resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.73.tgz#af7d7ce9ad523fa3e241d437cc3ab1862f9a1f29" - integrity sha512-aJJIElCLWnHMcYZPtsM07QoSfHwpxCy4VUzBYGXFYEmh/h2QS5uZNbCCfL0CqnkOE30b7Tp9DVfjXag+3qzZjQ== - dependencies: - isomorphic.js "^0.2.4" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= - -lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loose-envify@^1.0.0, loose-envify@^1.1.0, 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" - -ltgt@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= - -marked@^4.0.17: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -mime@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.0: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -mkdirp@^0.5.5: - 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.24.0: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -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.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nanoid@^3.1.23, nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -node-fetch@^2.6.0, node-fetch@^2.6.1: - 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-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" - integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== - -normalize.css@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" - integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== - -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-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-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -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== - -opener@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -parse-srcset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" - integrity sha1-8r0iH2zJcKk42IVWq8WJyqqiveE= - -path-browserify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path@~0.12.7: - version "0.12.7" - resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" - integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= - dependencies: - process "^0.11.1" - util "^0.10.3" - -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== - -playwright-core@1.32.1: - version "1.32.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.32.1.tgz#5a10c32403323b07d75ea428ebeed866a80b76a1" - integrity sha512-KZYUQC10mXD2Am1rGlidaalNGYk3LU1vZqqNk0gT4XPty1jOqgup8KDP8l2CUlqoNKhXM5IfGjWgW37xvGllBA== - -popper.js@^1.14.4, popper.js@^1.16.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== - -portfinder@^1.0.25: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -postcss@^8.3.11: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -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.1: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^2.1.0: - 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.4.0: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - -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== - -react-dom@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - -react-is@^16.13.1, react-is@^16.9.0: - 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-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - -react-popper@^1.3.7: - version "1.3.11" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" - integrity sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg== - dependencies: - "@babel/runtime" "^7.1.2" - "@hypnosphi/create-react-context" "^0.3.1" - deep-equal "^1.1.1" - popper.js "^1.14.4" - prop-types "^15.6.1" - typed-styles "^0.0.7" - warning "^4.0.2" - -react-transition-group@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== - dependencies: - dom-helpers "^3.4.0" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" - -react@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -readable-stream@^2.1.4: - 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.4.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" - -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regexp.prototype.flags@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" - integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -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= - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - -robust-predicates@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a" - integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g== - -rw@1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" - integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= - -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-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== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sanitize-html@~2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.7.3.tgz#166c868444ee4f9fd7352ac8c63fa86c343fc2bd" - integrity sha512-jMaHG29ak4miiJ8wgqA1849iInqORgNv7SLfSw9LtfOhEUQ1C0YHKH73R+hgyufBW9ZFeJrb057k9hjlfBCVlw== - dependencies: - deepmerge "^4.2.2" - escape-string-regexp "^4.0.0" - htmlparser2 "^6.0.0" - is-plain-object "^5.0.0" - parse-srcset "^1.0.2" - postcss "^8.3.11" - -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -secure-compare@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" - integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= - -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" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -string-width@^4.1.0, string-width@^4.2.0: - 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_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@^6.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" - -supports-color@^7.1.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" - -systeminformation@^5.8.6: - version "5.21.8" - resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.21.8.tgz#18395187e5983698619ed07ca8640ae48ec232b2" - integrity sha512-Xf1KDMUTQHLOT9Z7MjpSpsbaICOHcm4OZ9c9qqpkCoXuxq5MoyDrgu5GIQYpoiralXNPrqxDz3ND8MdllpXeQA== - -topojson-client@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" - integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== - dependencies: - commander "2" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -tslib@~1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - -tslib@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -typed-styles@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" - integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== - -typestyle@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/typestyle/-/typestyle-2.2.0.tgz#0b89231c405dda47e5acdcc2c33143ec7257134a" - integrity sha512-2lfoH6Wp0B2fhEwy+aXzRxAaLEz/JLKUKmlttYT2yYSZhoyI2MEgv5iQjvtIBu5q/EwyqTNuYcoL1Mioqv7dsA== - dependencies: - csstype "2.6.9" - free-style "3.1.0" - -union@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" - integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== - dependencies: - qs "^6.4.0" - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-join@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" - integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg= - -url-parse@~1.5.1: - 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" - -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.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - -validate.io-array@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" - integrity sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg== - -validate.io-function@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" - integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ== - -validate.io-integer-array@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz#2cabde033293a6bcbe063feafe91eaf46b13a089" - integrity sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA== - dependencies: - validate.io-array "^1.0.3" - validate.io-integer "^1.0.4" - -validate.io-integer@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068" - integrity sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ== - dependencies: - validate.io-number "^1.0.3" - -validate.io-number@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" - integrity sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg== - -vega-canvas@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/vega-canvas/-/vega-canvas-1.2.6.tgz#55e032ce9a62acd17229f6bac66d99db3d6879cd" - integrity sha512-rgeYUpslYn/amIfnuv3Sw6n4BGns94OjjZNtUc9IDji6b+K8LGS/kW+Lvay8JX/oFqtulBp8RLcHN6QjqPLA9Q== - -vega-canvas@^1.2.6, vega-canvas@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/vega-canvas/-/vega-canvas-1.2.7.tgz#cf62169518f5dcd91d24ad352998c2248f8974fb" - integrity sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q== - -vega-crossfilter@~4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/vega-crossfilter/-/vega-crossfilter-4.1.1.tgz#3ff3ca0574883706f7a399dc6d60f4a0f065ece4" - integrity sha512-yesvlMcwRwxrtAd9IYjuxWJJuAMI0sl7JvAFfYtuDkkGDtqfLXUcCzHIATqW6igVIE7tWwGxnbfvQLhLNgK44Q== - dependencies: - d3-array "^3.2.2" - vega-dataflow "^5.7.5" - vega-util "^1.17.1" - -vega-dataflow@^5.7.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/vega-dataflow/-/vega-dataflow-5.7.4.tgz#7cafc0a41b9d0b11dd2e34a513f8b7ca345dfd74" - integrity sha512-JGHTpUo8XGETH3b1V892we6hdjzCWB977ybycIu8DPqRoyrZuj6t1fCVImazfMgQD1LAfJlQybWP+alwKDpKig== - dependencies: - vega-format "^1.0.4" - vega-loader "^4.3.2" - vega-util "^1.16.1" - -vega-dataflow@^5.7.5, vega-dataflow@~5.7.5: - version "5.7.5" - resolved "https://registry.yarnpkg.com/vega-dataflow/-/vega-dataflow-5.7.5.tgz#0d559f3c3a968831f2995e099a2e270993ddfed9" - integrity sha512-EdsIl6gouH67+8B0f22Owr2tKDiMPNNR8lEvJDcxmFw02nXd8juimclpLvjPQriqn6ta+3Dn5txqfD117H04YA== - dependencies: - vega-format "^1.1.1" - vega-loader "^4.5.1" - vega-util "^1.17.1" - -vega-encode@~4.9.1: - version "4.9.1" - resolved "https://registry.yarnpkg.com/vega-encode/-/vega-encode-4.9.1.tgz#bad0e99bebec86d42184bcb898576c8accd91e89" - integrity sha512-05JB47UZaqIBS9t6rtHI/aKjEuH4EsSIH+wJWItht4BFj33eIl4XRNtlXdE31uuQT2pXWz5ZWW3KboMuaFzKLw== - dependencies: - d3-array "^3.2.2" - d3-interpolate "^3.0.1" - vega-dataflow "^5.7.5" - vega-scale "^7.3.0" - vega-util "^1.17.1" - -vega-event-selector@^3.0.1, vega-event-selector@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vega-event-selector/-/vega-event-selector-3.0.1.tgz#b99e92147b338158f8079d81b28b2e7199c2e259" - integrity sha512-K5zd7s5tjr1LiOOkjGpcVls8GsH/f2CWCrWcpKy74gTCp+llCdwz0Enqo013ZlGaRNjfgD/o1caJRt3GSaec4A== - -vega-event-selector@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vega-event-selector/-/vega-event-selector-3.0.0.tgz#7b855ac0c3ddb59bc5b5caa0d96dbbc9fbd33a4c" - integrity sha512-Gls93/+7tEJGE3kUuUnxrBIxtvaNeF01VIFB2Q2Of2hBIBvtHX74jcAdDtkh5UhhoYGD8Q1J30P5cqEBEwtPoQ== - -vega-expression@^5.0.1, vega-expression@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/vega-expression/-/vega-expression-5.0.1.tgz#e6a6eff564d2a93496a9bf34cbc78d8942f236a8" - integrity sha512-atfzrMekrcsuyUgZCMklI5ki8cV763aeo1Y6YrfYU7FBwcQEoFhIV/KAJ1vae51aPDGtfzvwbtVIo3WShFCP2Q== - dependencies: - "@types/estree" "^1.0.0" - vega-util "^1.17.1" - -vega-expression@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vega-expression/-/vega-expression-5.0.0.tgz#938f26689693a1e0d26716030cdaed43ca7abdfb" - integrity sha512-y5+c2frq0tGwJ7vYXzZcfVcIRF/QGfhf2e+bV1Z0iQs+M2lI1II1GPDdmOcMKimpoCVp/D61KUJDIGE1DSmk2w== - dependencies: - "@types/estree" "^0.0.50" - vega-util "^1.16.0" - -vega-force@~4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/vega-force/-/vega-force-4.1.1.tgz#27bffa96bda293f27d2a2492c2cbf99d49fec77e" - integrity sha512-T6fJAUz9zdXf2qj2Hz0VlmdtaY7eZfcKNazhUV8hza4R3F9ug6r/hSrdovfc9ExmbUjL5iyvDUsf63r8K3/wVQ== - dependencies: - d3-force "^3.0.0" - vega-dataflow "^5.7.5" - vega-util "^1.17.1" - -vega-format@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vega-format/-/vega-format-1.0.4.tgz#40c0c252d11128738b845ee73d8173f8064d6626" - integrity sha512-oTAeub3KWm6nKhXoYCx1q9G3K43R6/pDMXvqDlTSUtjoY7b/Gixm8iLcir5S9bPjvH40n4AcbZsPmNfL/Up77A== - dependencies: - d3-array "^2.7.1" - d3-format "^2.0.0" - d3-time-format "^3.0.0" - vega-time "^2.0.3" - vega-util "^1.15.2" - -vega-format@^1.1.1, vega-format@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vega-format/-/vega-format-1.1.1.tgz#92e4876e18064e7ad54f39045f7b24dede0030b8" - integrity sha512-Rll7YgpYbsgaAa54AmtEWrxaJqgOh5fXlvM2wewO4trb9vwM53KBv4Q/uBWCLK3LLGeBXIF6gjDt2LFuJAUtkQ== - dependencies: - d3-array "^3.2.2" - d3-format "^3.1.0" - d3-time-format "^4.1.0" - vega-time "^2.1.1" - vega-util "^1.17.1" - -vega-functions@^5.13.1, vega-functions@~5.13.1: - version "5.13.1" - resolved "https://registry.yarnpkg.com/vega-functions/-/vega-functions-5.13.1.tgz#504d672924495fe3ea844e6940c7f6e151cde151" - integrity sha512-0LhntimnvBl4VzRO/nkCwCTbtaP8bE552galKQbCg88GDxdmcmlsoTCwUzG0vZ/qmNM3IbqnP5k5/um3zwFqLw== - dependencies: - d3-array "^3.2.2" - d3-color "^3.1.0" - d3-geo "^3.1.0" - vega-dataflow "^5.7.5" - vega-expression "^5.0.1" - vega-scale "^7.3.0" - vega-scenegraph "^4.10.2" - vega-selections "^5.4.1" - vega-statistics "^1.8.1" - vega-time "^2.1.1" - vega-util "^1.17.1" - -vega-geo@~4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/vega-geo/-/vega-geo-4.4.1.tgz#3850232bf28c98fab5e26c5fb401acb6fb37b5e5" - integrity sha512-s4WeZAL5M3ZUV27/eqSD3v0FyJz3PlP31XNSLFy4AJXHxHUeXT3qLiDHoVQnW5Om+uBCPDtTT1ROx1smGIf2aA== - dependencies: - d3-array "^3.2.2" - d3-color "^3.1.0" - d3-geo "^3.1.0" - vega-canvas "^1.2.7" - vega-dataflow "^5.7.5" - vega-projection "^1.6.0" - vega-statistics "^1.8.1" - vega-util "^1.17.1" - -vega-hierarchy@~4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/vega-hierarchy/-/vega-hierarchy-4.1.1.tgz#897974a477dfa70cc0d4efab9465b6cc79a9071f" - integrity sha512-h5mbrDtPKHBBQ9TYbvEb/bCqmGTlUX97+4CENkyH21tJs7naza319B15KRK0NWOHuhbGhFmF8T0696tg+2c8XQ== - dependencies: - d3-hierarchy "^3.1.2" - vega-dataflow "^5.7.5" - vega-util "^1.17.1" - -vega-label@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/vega-label/-/vega-label-1.2.1.tgz#ea45fa5a407991c44edfea9c4ca40874d544a3db" - integrity sha512-n/ackJ5lc0Xs9PInCaGumYn2awomPjJ87EMVT47xNgk2bHmJoZV1Ve/1PUM6Eh/KauY211wPMrNp/9Im+7Ripg== - dependencies: - vega-canvas "^1.2.6" - vega-dataflow "^5.7.3" - vega-scenegraph "^4.9.2" - vega-util "^1.15.2" - -vega-lite@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.2.0.tgz#bc3c5c70a38d9de8f3fb9644c7dd52f3b9f47a1b" - integrity sha512-Yxcg8MvYfxHcG6BbkaKT0oVCIMIcE19UvqIsEwBmyd/7h2nzW7oRnID81T8UrY7hpDrIr6wa2JADOT2dhGNErw== - dependencies: - "@types/clone" "~2.1.1" - array-flat-polyfill "^1.0.1" - clone "~2.1.2" - fast-deep-equal "~3.1.3" - fast-json-stable-stringify "~2.1.0" - json-stringify-pretty-compact "~3.0.0" - tslib "~2.3.1" - vega-event-selector "~3.0.0" - vega-expression "~5.0.0" - vega-util "~1.17.0" - yargs "~17.2.1" - -vega-loader@^4.3.2, vega-loader@^4.3.3: - version "4.4.1" - resolved "https://registry.yarnpkg.com/vega-loader/-/vega-loader-4.4.1.tgz#8f9de46202f33659d1a2737f6e322a9fc3364275" - integrity sha512-dj65i4qlNhK0mOmjuchHgUrF5YUaWrYpx0A8kXA68lBk5Hkx8FNRztkcl07CZJ1+8V81ymEyJii9jzGbhEX0ag== - dependencies: - d3-dsv "^2.0.0" - node-fetch "^2.6.1" - topojson-client "^3.1.0" - vega-format "^1.0.4" - vega-util "^1.16.0" - -vega-loader@^4.5.1, vega-loader@~4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/vega-loader/-/vega-loader-4.5.1.tgz#b85262b3cb8376487db0c014a8a13c3a5e6d52ad" - integrity sha512-qy5x32SaT0YkEujQM2yKqvLGV9XWQ2aEDSugBFTdYzu/1u4bxdUSRDREOlrJ9Km3RWIOgFiCkobPmFxo47SKuA== - dependencies: - d3-dsv "^3.0.1" - node-fetch "^2.6.7" - topojson-client "^3.1.0" - vega-format "^1.1.1" - vega-util "^1.17.1" - -vega-parser@~6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/vega-parser/-/vega-parser-6.2.0.tgz#c982aff0a6409486cbbe743a5799412b8b897654" - integrity sha512-as+QnX8Qxe9q51L1C2sVBd+YYYctP848+zEvkBT2jlI2g30aZ6Uv7sKsq7QTL6DUbhXQKR0XQtzlanckSFdaOQ== - dependencies: - vega-dataflow "^5.7.5" - vega-event-selector "^3.0.1" - vega-functions "^5.13.1" - vega-scale "^7.3.0" - vega-util "^1.17.1" - -vega-projection@^1.6.0, vega-projection@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/vega-projection/-/vega-projection-1.6.0.tgz#921acd3220e7d9d04ccd5ce0109433afb3236966" - integrity sha512-LGUaO/kpOEYuTlul+x+lBzyuL9qmMwP1yShdUWYLW+zXoeyGbs5OZW+NbPPwLYqJr5lpXDr/vGztFuA/6g2xvQ== - dependencies: - d3-geo "^3.1.0" - d3-geo-projection "^4.0.0" - vega-scale "^7.3.0" - -vega-regression@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vega-regression/-/vega-regression-1.1.1.tgz#b53a964152a2fec4847e31571f522bfda23089af" - integrity sha512-98i/z0vdDhOIEhJUdYoJ2nlfVdaHVp2CKB39Qa7G/XyRw0+QwDFFrp8ZRec2xHjHfb6bYLGNeh1pOsC13FelJg== - dependencies: - d3-array "^3.2.2" - vega-dataflow "^5.7.3" - vega-statistics "^1.7.9" - vega-util "^1.15.2" - -vega-runtime@^6.1.4, vega-runtime@~6.1.4: - version "6.1.4" - resolved "https://registry.yarnpkg.com/vega-runtime/-/vega-runtime-6.1.4.tgz#98b67160cea9554e690bfd44719f9d17f90c4220" - integrity sha512-0dDYXyFLQcxPQ2OQU0WuBVYLRZnm+/CwVu6i6N4idS7R9VXIX5581EkCh3pZ20pQ/+oaA7oJ0pR9rJgJ6rukRQ== - dependencies: - vega-dataflow "^5.7.5" - vega-util "^1.17.1" - -vega-scale@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/vega-scale/-/vega-scale-7.1.1.tgz#b69a38d1980f6fc1093390f796e556be63fdc808" - integrity sha512-yE0to0prA9E5PBJ/XP77TO0BMkzyUVyt7TH5PAwj+CZT7PMsMO6ozihelRhoIiVcP0Ae/ByCEQBUQkzN5zJ0ZA== - dependencies: - d3-array "^2.7.1" - d3-interpolate "^2.0.1" - d3-scale "^3.2.2" - vega-time "^2.0.4" - vega-util "^1.15.2" - -vega-scale@^7.3.0, vega-scale@~7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/vega-scale/-/vega-scale-7.3.0.tgz#02b83435a892c6d91a87ee7d3d350fac987f464b" - integrity sha512-pMOAI2h+e1z7lsqKG+gMfR6NKN2sTcyjZbdJwntooW0uFHwjLGjMSY7kSd3nSEquF0HQ8qF7zR6gs1eRwlGimw== - dependencies: - d3-array "^3.2.2" - d3-interpolate "^3.0.1" - d3-scale "^4.0.2" - vega-time "^2.1.1" - vega-util "^1.17.1" - -vega-scenegraph@^4.10.2, vega-scenegraph@~4.10.2: - version "4.10.2" - resolved "https://registry.yarnpkg.com/vega-scenegraph/-/vega-scenegraph-4.10.2.tgz#3ae9ad8e99bbf75e2a4f3ebf2c1f9dee7562d245" - integrity sha512-R8m6voDZO5+etwNMcXf45afVM3XAtokMqxuDyddRl9l1YqSJfS+3u8hpolJ50c2q6ZN20BQiJwKT1o0bB7vKkA== - dependencies: - d3-path "^3.1.0" - d3-shape "^3.2.0" - vega-canvas "^1.2.7" - vega-loader "^4.5.1" - vega-scale "^7.3.0" - vega-util "^1.17.1" - -vega-scenegraph@^4.9.2: - version "4.9.4" - resolved "https://registry.yarnpkg.com/vega-scenegraph/-/vega-scenegraph-4.9.4.tgz#468408c1e89703fa9d3450445daabff623de2757" - integrity sha512-QaegQzbFE2yhYLNWAmHwAuguW3yTtQrmwvfxYT8tk0g+KKodrQ5WSmNrphWXhqwtsgVSvtdZkfp2IPeumcOQJg== - dependencies: - d3-path "^2.0.0" - d3-shape "^2.0.0" - vega-canvas "^1.2.5" - vega-loader "^4.3.3" - vega-scale "^7.1.1" - vega-util "^1.15.2" - -vega-selections@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/vega-selections/-/vega-selections-5.4.1.tgz#3233acb920703bfc323df8b960aa52e55ac08c70" - integrity sha512-EtYc4DvA+wXqBg9tq+kDomSoVUPCmQfS7hUxy2qskXEed79YTimt3Hcl1e1fW226I4AVDBEqTTKebmKMzbSgAA== - dependencies: - d3-array "3.2.2" - vega-expression "^5.0.1" - vega-util "^1.17.1" - -vega-statistics@^1.7.9: - version "1.7.10" - resolved "https://registry.yarnpkg.com/vega-statistics/-/vega-statistics-1.7.10.tgz#4353637402e5e96bff2ebd16bd58e2c15cac3018" - integrity sha512-QLb12gcfpDZ9K5h3TLGrlz4UXDH9wSPyg9LLfOJZacxvvJEPohacUQNrGEAVtFO9ccUCerRfH9cs25ZtHsOZrw== - dependencies: - d3-array "^2.7.1" - -vega-statistics@^1.8.1, vega-statistics@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/vega-statistics/-/vega-statistics-1.8.1.tgz#596fc3713ac68cc649bf28d0faf7def5ef34fef6" - integrity sha512-eRR3LZBusnTXUkc/uunAvWi1PjCJK+Ba4vFvEISc5Iv5xF4Aw2cBhEz1obEt6ID5fGVCTAl0E1LOSFxubS89hQ== - dependencies: - d3-array "^3.2.2" - -vega-time@^2.0.3, vega-time@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vega-time/-/vega-time-2.0.4.tgz#ff308358a831de927caa44e281cdc96f0863ba08" - integrity sha512-U314UDR9+ZlWrD3KBaeH+j/c2WSMdvcZq5yJfFT0yTg1jsBKAQBYFGvl+orackD8Zx3FveHOxx3XAObaQeDX+Q== - dependencies: - d3-array "^2.7.1" - d3-time "^2.0.0" - vega-util "^1.15.2" - -vega-time@^2.1.1, vega-time@~2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/vega-time/-/vega-time-2.1.1.tgz#0f1fb4e220dd5ed57401b58fb2293241f049ada0" - integrity sha512-z1qbgyX0Af2kQSGFbApwBbX2meenGvsoX8Nga8uyWN8VIbiySo/xqizz1KrP6NbB6R+x5egKmkjdnyNThPeEWA== - dependencies: - d3-array "^3.2.2" - d3-time "^3.1.0" - vega-util "^1.17.1" - -vega-transforms@~4.10.1: - version "4.10.1" - resolved "https://registry.yarnpkg.com/vega-transforms/-/vega-transforms-4.10.1.tgz#5e51f4f3a745d43609e0d8ba1d74a7e53014030a" - integrity sha512-0uWrUZaYl8kjWrGbvPOQSKk6kcNXQFY9moME+bUmkADAvFptphCGbaEIn/nSsG6uCxj8E3rqKmKfjSWdU5yOqA== - dependencies: - d3-array "^3.2.2" - vega-dataflow "^5.7.5" - vega-statistics "^1.8.1" - vega-time "^2.1.1" - vega-util "^1.17.1" - -vega-typings@~0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/vega-typings/-/vega-typings-0.23.0.tgz#5b001f5b51a477e67d2446ef9b964e1dac48a20e" - integrity sha512-10ZRRGoUZoQLS5jMiIFhSZMDc3UkPhDP2VMUN/oHZXElvPCGjfjvgmiC6XzvvN4sRXdccMcZX1lZPoyYPERVkA== - dependencies: - "@types/geojson" "^7946.0.10" - vega-event-selector "^3.0.1" - vega-expression "^5.0.1" - vega-util "^1.17.1" - -vega-util@^1.15.2, vega-util@^1.16.0, vega-util@^1.16.1, vega-util@~1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/vega-util/-/vega-util-1.17.0.tgz#b72ae0baa97f943bf591f8f5bb27ceadf06834ac" - integrity sha512-HTaydZd9De3yf+8jH66zL4dXJ1d1p5OIFyoBzFiOli4IJbwkL1jrefCKz6AHDm1kYBzDJ0X4bN+CzZSCTvNk1w== - -vega-util@^1.17.1, vega-util@~1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/vega-util/-/vega-util-1.17.1.tgz#717865fc6b660ceb3ae16273d21166ed471c2db4" - integrity sha512-ToPkWoBdP6awoK+bnYaFhgdqZhsNwKxWbuMnFell+4K/Cb6Q1st5Pi9I7iI5Y6n5ZICDDsd6eL7/IhBjEg1NUQ== - -vega-view-transforms@~4.5.9: - version "4.5.9" - resolved "https://registry.yarnpkg.com/vega-view-transforms/-/vega-view-transforms-4.5.9.tgz#5f109555c08ee9ac23ff9183d578eb9cbac6fe61" - integrity sha512-NxEq4ZD4QwWGRrl2yDLnBRXM9FgCI+vvYb3ZC2+nVDtkUxOlEIKZsMMw31op5GZpfClWLbjCT3mVvzO2xaTF+g== - dependencies: - vega-dataflow "^5.7.5" - vega-scenegraph "^4.10.2" - vega-util "^1.17.1" - -vega-view@~5.11.1: - version "5.11.1" - resolved "https://registry.yarnpkg.com/vega-view/-/vega-view-5.11.1.tgz#a703d7d6344489c6a6e9e9d9c7a732519bf4432c" - integrity sha512-RoWxuoEMI7xVQJhPqNeLEHCezudsf3QkVMhH5tCovBqwBADQGqq9iWyax3ZzdyX1+P3eBgm7cnLvpqtN2hU8kA== - dependencies: - d3-array "^3.2.2" - d3-timer "^3.0.1" - vega-dataflow "^5.7.5" - vega-format "^1.1.1" - vega-functions "^5.13.1" - vega-runtime "^6.1.4" - vega-scenegraph "^4.10.2" - vega-util "^1.17.1" - -vega-voronoi@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/vega-voronoi/-/vega-voronoi-4.2.1.tgz#521a22d3d4c545fe1d5eea19eac0fd3ac5e58b1b" - integrity sha512-zzi+fxU/SBad4irdLLsG3yhZgXWZezraGYVQfZFWe8kl7W/EHUk+Eqk/eetn4bDeJ6ltQskX+UXH3OP5Vh0Q0Q== - dependencies: - d3-delaunay "^6.0.2" - vega-dataflow "^5.7.5" - vega-util "^1.17.1" - -vega-wordcloud@~4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/vega-wordcloud/-/vega-wordcloud-4.1.4.tgz#38584cf47ef52325d6a8dc38908b5d2378cc6e62" - integrity sha512-oeZLlnjiusLAU5vhk0IIdT5QEiJE0x6cYoGNq1th+EbwgQp153t4r026fcib9oq15glHFOzf81a8hHXHSJm1Jw== - dependencies: - vega-canvas "^1.2.7" - vega-dataflow "^5.7.5" - vega-scale "^7.3.0" - vega-statistics "^1.8.1" - vega-util "^1.17.1" - -vega@^5.20.0: - version "5.23.0" - resolved "https://registry.yarnpkg.com/vega/-/vega-5.23.0.tgz#7e3899b65f1a84095545b74dcf71289890844c49" - integrity sha512-FjgDD/VmL9yl36ByLq66mEusDF/wZGRktK4JA5MkF68hQqj3F8BFMDDVNwCASuwY97H6wr7kw/RFqNI6XocjJQ== - dependencies: - vega-crossfilter "~4.1.1" - vega-dataflow "~5.7.5" - vega-encode "~4.9.1" - vega-event-selector "~3.0.1" - vega-expression "~5.0.1" - vega-force "~4.1.1" - vega-format "~1.1.1" - vega-functions "~5.13.1" - vega-geo "~4.4.1" - vega-hierarchy "~4.1.1" - vega-label "~1.2.1" - vega-loader "~4.5.1" - vega-parser "~6.2.0" - vega-projection "~1.6.0" - vega-regression "~1.1.1" - vega-runtime "~6.1.4" - vega-scale "~7.3.0" - vega-scenegraph "~4.10.2" - vega-statistics "~1.8.1" - vega-time "~2.1.1" - vega-transforms "~4.10.1" - vega-typings "~0.23.0" - vega-util "~1.17.1" - vega-view "~5.11.1" - vega-view-transforms "~4.5.9" - vega-voronoi "~4.2.1" - vega-wordcloud "~4.1.4" - -warning@^4.0.2, warning@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - -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= - -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" - -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" - -ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -ws@^7.4.6: - version "7.5.7" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== - -xtend@^4.0.2, xtend@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y-codemirror@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/y-codemirror/-/y-codemirror-3.0.1.tgz#d8a4e43cf46b5b557e0f03b7bbb65773ff436278" - integrity sha512-TsLSoouAZxkxOKbmTj7qdwZNS0lZMVqIdp7/j9EgUUqYj0remZYDGl6VBABrmp9UX1QvX6RoXXqzbNhftgfCbA== - dependencies: - lib0 "^0.2.42" - -y-leveldb@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/y-leveldb/-/y-leveldb-0.1.1.tgz#c2c35bc2b12a6c195b807a127c56c7c5a50cc610" - integrity sha512-L8Q0MQmxCQ0qWIOuPzLbWn95TNhrCI7M6LaHnilU4I2IX08e4Dmfg5Tgy4JZ3tnl2aiuZyDOJplHl/msIB/IsA== - dependencies: - level "^6.0.1" - lib0 "^0.2.31" - -y-protocols@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/y-protocols/-/y-protocols-1.0.5.tgz#91d574250060b29fcac8f8eb5e276fbad594245e" - integrity sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A== - dependencies: - lib0 "^0.2.42" - -y-websocket@^1.4.6: - version "1.5.0" - resolved "https://registry.yarnpkg.com/y-websocket/-/y-websocket-1.5.0.tgz#3c13ed205f1553185e1d144eac94150b5b5d55d6" - integrity sha512-A8AO6XtnQlYwWFytWdkDCeXg4l8ghRTIw5h2YUgUYDmEC9ugWGIwYNW80yadhSFAF7CvuWTEkQNEpevnH6EiZw== - dependencies: - lib0 "^0.2.52" - lodash.debounce "^4.0.8" - y-protocols "^1.0.5" - optionalDependencies: - ws "^6.2.1" - y-leveldb "^0.1.0" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@~17.2.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" - integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yjs@^13.5.40: - version "13.5.51" - resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.5.51.tgz#afd5a26a230498c3b4bf8fee9c8dbeea71ef7e5c" - integrity sha512-F1Nb3z3TdandD80IAeQqgqy/2n9AhDLcXoBhZvCUX1dNVe0ef7fIwi6MjSYaGAYF2Ev8VcLcsGnmuGGOl7AWbw== - dependencies: - lib0 "^0.2.72" +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.3.2, @codemirror/autocomplete@npm:^6.5.1, @codemirror/autocomplete@npm:^6.7.1": + version: 6.9.1 + resolution: "@codemirror/autocomplete@npm:6.9.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + peerDependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + checksum: 96dad7a12429bf61e6f1bf75da731bf0dcbfeb56c33400b60a0de22049226e0926a53a174e84701812a235f8f144595ce53f0928054481bdf9cdc2ed3b8be20f + languageName: node + linkType: hard + +"@codemirror/commands@npm:^6.2.3": + version: 6.3.0 + resolution: "@codemirror/commands@npm:6.3.0" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.1.0 + checksum: d6ade0ba7d4f80c2e44163935783d2f2f35c8b641a4b4f62452c0630211670abe5093786cf5a4af14147102d4284dae660a26f3ae58fd840e838685a81107d11 + languageName: node + linkType: hard + +"@codemirror/lang-cpp@npm:^6.0.2": + version: 6.0.2 + resolution: "@codemirror/lang-cpp@npm:6.0.2" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/cpp": ^1.0.0 + checksum: bb9eba482cca80037ce30c7b193cf45eff19ccbb773764fddf2071756468ecc25aa53c777c943635054f89095b0247b9b50c339e107e41e68d34d12a7295f9a9 + languageName: node + linkType: hard + +"@codemirror/lang-css@npm:^6.0.0, @codemirror/lang-css@npm:^6.1.1": + version: 6.2.1 + resolution: "@codemirror/lang-css@npm:6.2.1" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.2 + "@lezer/css": ^1.0.0 + checksum: 5a8457ee8a4310030a969f2d3128429f549c4dc9b7907ee8888b42119c80b65af99093801432efdf659b8ec36a147d2a947bc1ecbbf69a759395214e3f4834a8 + languageName: node + linkType: hard + +"@codemirror/lang-html@npm:^6.0.0, @codemirror/lang-html@npm:^6.4.3": + version: 6.4.6 + resolution: "@codemirror/lang-html@npm:6.4.6" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/lang-css": ^6.0.0 + "@codemirror/lang-javascript": ^6.0.0 + "@codemirror/language": ^6.4.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + "@lezer/css": ^1.1.0 + "@lezer/html": ^1.3.0 + checksum: 8f884f4423ffc783181ee933f7212ad4ece204695cf8af9535a593f95e901d36515a8561fc336a0fbcf5782369b9484eeb0d2cec2167622868238177c5e6eb36 + languageName: node + linkType: hard + +"@codemirror/lang-java@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-java@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/java": ^1.0.0 + checksum: 4679104683cbffcd224ac04c7e5d144b787494697b26470b07017259035b7bb3fa62609d9a61bfbc566f1756d9f972f9f26d96a3c1362dd48881c1172f9a914d + languageName: node + linkType: hard + +"@codemirror/lang-javascript@npm:^6.0.0, @codemirror/lang-javascript@npm:^6.1.7": + version: 6.2.1 + resolution: "@codemirror/lang-javascript@npm:6.2.1" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.6.0 + "@codemirror/lint": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + "@lezer/javascript": ^1.0.0 + checksum: 3df38c4cced06195283a9a2a9365aaa7c8c1b157852b331bc3a118403f774bbba57d2a392de52f5e28d2b344a323bc0146bcf7c8ef8be2473f167d815e4a37cd + languageName: node + linkType: hard + +"@codemirror/lang-json@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-json@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/json": ^1.0.0 + checksum: e9e87d50ff7b81bd56a6ab50740b1dd54e9a93f1be585e1d59d0642e2148842ea1528ac7b7221eb4ddc7fe84bbc28065144cc3ab86f6e06c6aeb2d4b4e62acf1 + languageName: node + linkType: hard + +"@codemirror/lang-markdown@npm:^6.1.1": + version: 6.2.1 + resolution: "@codemirror/lang-markdown@npm:6.2.1" + dependencies: + "@codemirror/autocomplete": ^6.7.1 + "@codemirror/lang-html": ^6.0.0 + "@codemirror/language": ^6.3.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/markdown": ^1.0.0 + checksum: ef3bdfd01e418efc7f7fdf0baa2e8e91875b37f870fcad98f846954763c7cc71bac95736591cd6c52b39cc380261d76ae7b37ca97ef1641c4c266476748046d3 + languageName: node + linkType: hard + +"@codemirror/lang-php@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-php@npm:6.0.1" + dependencies: + "@codemirror/lang-html": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/php": ^1.0.0 + checksum: c003a29a426486453fdfddbf7302982fa2aa7f059bf6f1ce4cbf08341b0162eee5e2f50e0d71c418dcd358491631780156d846fe352754d042576172c5d86721 + languageName: node + linkType: hard + +"@codemirror/lang-python@npm:^6.1.3": + version: 6.1.3 + resolution: "@codemirror/lang-python@npm:6.1.3" + dependencies: + "@codemirror/autocomplete": ^6.3.2 + "@codemirror/language": ^6.8.0 + "@lezer/python": ^1.1.4 + checksum: 65a0276a4503e4e3b70dd28d1c93ef472632b6d2c4bf3ae92d305d14ee8cf60b0bbbf62d5ceb51294de9598d9e2d42eafcde26f317ee7b90d0a11dfa863c1d1a + languageName: node + linkType: hard + +"@codemirror/lang-rust@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-rust@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/rust": ^1.0.0 + checksum: 8a439944cb22159b0b3465ca4fa4294c69843219d5d30e278ae6df8e48f30a7a9256129723c025ec9b5e694d31a3560fb004300b125ffcd81c22d13825845170 + languageName: node + linkType: hard + +"@codemirror/lang-sql@npm:^6.4.1": + version: 6.5.4 + resolution: "@codemirror/lang-sql@npm:6.5.4" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: face21b0231ac5a7981949b5bf6a99ed092d0d6f7eb83f35dcd31d56ecf07dafa19d21623e0bad36cec7a12e3149df7b45c3588aeee31eae41e9b05942c4fdd7 + languageName: node + linkType: hard + +"@codemirror/lang-wast@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-wast@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 600d98d3ea6a4e99292244ed707e39a2abd9f3abf62cfeff5c819a0cc0c7e86b8c5b91e91c1b7ea21233d9ea09c41abe61d8a40b2547bb5db74239c6df857934 + languageName: node + linkType: hard + +"@codemirror/lang-xml@npm:^6.0.2": + version: 6.0.2 + resolution: "@codemirror/lang-xml@npm:6.0.2" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.4.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/xml": ^1.0.0 + checksum: e156ecafaa87e9b6ef4ab6812ccd00d8f3c6cb81f232837636b36336d80513b61936dfee6f4f6800574f236208b61e95a2abcb997cdcd7366585a6b796e0e13b + languageName: node + linkType: hard + +"@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.3.0, @codemirror/language@npm:^6.4.0, @codemirror/language@npm:^6.6.0, @codemirror/language@npm:^6.8.0": + version: 6.9.1 + resolution: "@codemirror/language@npm:6.9.1" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.1.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + style-mod: ^4.0.0 + checksum: 62265f1042d2edfd3a091c408d9d0071f23889099b2f6ce8275fa910118bd2c45b8c4b29228c7be6e6d5f0e0812a522de902bc75ba8d8b2e62e42ade1692a49a + languageName: node + linkType: hard + +"@codemirror/legacy-modes@npm:^6.3.2": + version: 6.3.3 + resolution: "@codemirror/legacy-modes@npm:6.3.3" + dependencies: + "@codemirror/language": ^6.0.0 + checksum: 3cd32b0f011b0a193e0948e5901b625f38aa6d9a8b24344531d6e142eb6fbb3e6cb5969429102044f3d04fbe53c4deaebd9f659c05067a0b18d17766290c9e05 + languageName: node + linkType: hard + +"@codemirror/lint@npm:^6.0.0": + version: 6.4.2 + resolution: "@codemirror/lint@npm:6.4.2" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + crelt: ^1.0.5 + checksum: 5e699960c1b28dbaa584fe091a3201978907bf4b9e52810fb15d3ceaf310e38053435e0b594da0985266ae812039a5cd6c36023284a6f8568664bdca04db137f + languageName: node + linkType: hard + +"@codemirror/search@npm:^6.3.0": + version: 6.5.4 + resolution: "@codemirror/search@npm:6.5.4" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + crelt: ^1.0.5 + checksum: 32a68e40486730949ee79f54b9fcc6c744559aef188d3c5bf82881f62e5fc9468fa21cf227507638160043c797eb054205802a649cf4a2350928fc161d5aac40 + languageName: node + linkType: hard + +"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.4, @codemirror/state@npm:^6.2.0": + version: 6.2.1 + resolution: "@codemirror/state@npm:6.2.1" + checksum: d12a321d0471b264b9d3259042bff913a8b939e8d28d408ff452004538a71ca9d5329df3f8a1d8a9183f5b42a7ef5b200737bcab1065714f5ae8e0a5ba9d59d3 + languageName: node + linkType: hard + +"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.9.6": + version: 6.21.2 + resolution: "@codemirror/view@npm:6.21.2" + dependencies: + "@codemirror/state": ^6.1.4 + style-mod: ^4.1.0 + w3c-keyname: ^2.2.4 + checksum: d972a32f26882a1811ffab833f8705339cd4c1bfe56765ed6ecbc1d84466b71a728adb8f4b4fc566ca3bccee5aacd2585e79cb96a851dcd48777e2320dab1892 + languageName: node + linkType: hard + +"@fortawesome/fontawesome-free@npm:^5.12.0": + version: 5.15.4 + resolution: "@fortawesome/fontawesome-free@npm:5.15.4" + checksum: 32281c3df4075290d9a96dfc22f72fadb3da7055d4117e48d34046b8c98032a55fa260ae351b0af5d6f6fb57a2f5d79a4abe52af456da35195f7cb7dda27b4a2 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@jupyter/ydoc@npm:^1.0.2": + version: 1.1.1 + resolution: "@jupyter/ydoc@npm:1.1.1" + dependencies: + "@jupyterlab/nbformat": ^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0 + "@lumino/coreutils": ^1.11.0 || ^2.0.0 + "@lumino/disposable": ^1.10.0 || ^2.0.0 + "@lumino/signaling": ^1.10.0 || ^2.0.0 + y-protocols: ^1.0.5 + yjs: ^13.5.40 + checksum: a239b1dd57cfc9ba36c06ac5032a1b6388849ae01a1d0db0d45094f71fdadf4d473b4bf8becbef0cfcdc85cae505361fbec0822b02da5aa48e06b66f742dd7a0 + languageName: node + linkType: hard + +"@jupyterlab/application@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/application@npm:4.0.6" + dependencies: + "@fortawesome/fontawesome-free": ^5.12.0 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/application": ^2.2.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 1212b71d3717bc02543b3eee74e69be799634421bd9b291b7adf07ba27bf6f9c7db860c423c824eaced9c2524db2f6b58de2c58e7edd5de2f0d7fabbb2c94b8c + languageName: node + linkType: hard + +"@jupyterlab/apputils@npm:^4.1.6": + version: 4.1.6 + resolution: "@jupyterlab/apputils@npm:4.1.6" + dependencies: + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/settingregistry": ^4.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + "@types/react": ^18.0.26 + react: ^18.2.0 + sanitize-html: ~2.7.3 + checksum: 40fb43f5a6464c665f1b941d164f3366ab8ea906fed72894ccf026ebeebf0734409edb6546a151ac267cbd4f945e23474251aed644f7f0f0dbf2548b9230ae22 + languageName: node + linkType: hard + +"@jupyterlab/attachments@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/attachments@npm:4.0.6" + dependencies: + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + checksum: b7efd01d6a0b7f28a4ee8114723cdc33267f1c1f84763b71a04e783024a87f639e442be74eda5afecff7eea5750d094f4da8a46ee711ec1298645eb92252c7ee + languageName: node + linkType: hard + +"@jupyterlab/cells@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/cells@npm:4.0.6" + dependencies: + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/attachments": ^4.0.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/codemirror": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/documentsearch": ^4.0.6 + "@jupyterlab/filebrowser": ^4.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/outputarea": ^4.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/toc": ^6.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: b0bb039c05ee0d83f40b5ccb0efa27d90723808c50821f8b8abedc8770387916bbc46d8a886102bf353b58e434cf33849981f782f1dbb3658835cce219940f33 + languageName: node + linkType: hard + +"@jupyterlab/codeeditor@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/codeeditor@npm:4.0.6" + dependencies: + "@codemirror/state": ^6.2.0 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 831d330273280781dbdc223325d575ac373c0db17fab208f327bce4e1c2286c62f8264d1d612da1a762bc006cd81dfb0eb5108dd3bd8f8298f9be8ecac98b2ca + languageName: node + linkType: hard + +"@jupyterlab/codemirror@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/codemirror@npm:4.0.6" + dependencies: + "@codemirror/autocomplete": ^6.5.1 + "@codemirror/commands": ^6.2.3 + "@codemirror/lang-cpp": ^6.0.2 + "@codemirror/lang-css": ^6.1.1 + "@codemirror/lang-html": ^6.4.3 + "@codemirror/lang-java": ^6.0.1 + "@codemirror/lang-javascript": ^6.1.7 + "@codemirror/lang-json": ^6.0.1 + "@codemirror/lang-markdown": ^6.1.1 + "@codemirror/lang-php": ^6.0.1 + "@codemirror/lang-python": ^6.1.3 + "@codemirror/lang-rust": ^6.0.1 + "@codemirror/lang-sql": ^6.4.1 + "@codemirror/lang-wast": ^6.0.1 + "@codemirror/lang-xml": ^6.0.2 + "@codemirror/language": ^6.6.0 + "@codemirror/legacy-modes": ^6.3.2 + "@codemirror/search": ^6.3.0 + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/documentsearch": ^4.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@lezer/common": ^1.0.2 + "@lezer/generator": ^1.2.2 + "@lezer/highlight": ^1.1.4 + "@lezer/markdown": ^1.0.2 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + yjs: ^13.5.40 + checksum: fdd0c4655e8597b1beb985b84b82dcfe29b4c8d0ae7e7ff3b0aecdbc94bc2b94ec0b617b3d59d7739e271e76433b2e624672d94ec64cfa4efc628cab92418175 + languageName: node + linkType: hard + +"@jupyterlab/console@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/console@npm:4.0.6" + dependencies: + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/cells": ^4.0.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 2d7213c83dc088b51976378b88c88f4cfd05d9cd14aa476cb8130ffbfedd7ac8af25a2e9a34b60bc8ec50ea973f33ed7689845d894d00c8cd095b3fec8fb5fa2 + languageName: node + linkType: hard + +"@jupyterlab/coreutils@npm:^6.0.6": + version: 6.0.6 + resolution: "@jupyterlab/coreutils@npm:6.0.6" + dependencies: + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + minimist: ~1.2.0 + path-browserify: ^1.0.0 + url-parse: ~1.5.4 + checksum: cf3cfbc7c48cae20549f5514a949b253c2f9d67c79db107ab0a81c2b7a9c08e28f9fd264e3d944a05a8cb1bbb9676c6b4163b75c28788d1cb3a3cc523d44d802 + languageName: node + linkType: hard + +"@jupyterlab/debugger@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/debugger@npm:4.0.6" + dependencies: + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/application": ^4.0.6 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/cells": ^4.0.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/codemirror": ^4.0.6 + "@jupyterlab/console": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/fileeditor": ^4.0.6 + "@jupyterlab/notebook": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/datagrid": ^2.2.0 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + "@vscode/debugprotocol": ^1.51.0 + react: ^18.2.0 + checksum: 7e686d218202fa8ec3511c789b77a8a6a53fe7a3b791023dd2b4a3c9a4ea943e0a59a675153c2807a29fe80f82e3ca050523eec0fa03bcb567204f408bdfdc3f + languageName: node + linkType: hard + +"@jupyterlab/docmanager@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/docmanager@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 25d3f694ae8664ca6c54bfcd36d8913caba9455fea68ed3df23963ce9723254c1f2c38fb6a93e267187f095392507d40cd2a4181c30173306c1c0b962e001b93 + languageName: node + linkType: hard + +"@jupyterlab/docregistry@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/docregistry@npm:4.0.6" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 57de3751ea04037f27596ffe782392fb4840f3fba1776a64bb7b0dc5936a3cee4de115b2133147cda23a697d3da7802daaec0effae10be329d6c774f102091ee + languageName: node + linkType: hard + +"@jupyterlab/documentsearch@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/documentsearch@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: e6cf3533cdae29ca2f81147b26b056718df16998f6d89274d90cffcc70eab705634a7e36d353e9dcaea38640b490315b4ae683e937755547f42b8a5623bc914a + languageName: node + linkType: hard + +"@jupyterlab/filebrowser@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/filebrowser@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docmanager": ^4.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: abe7eca4072a9c3d1f7a756840d0ad209403928b958fe09dfd81fbb693cb18c91c64027157babe1e7353a556b11c070716326b16ee2eb629089399906a3467be + languageName: node + linkType: hard + +"@jupyterlab/fileeditor@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/fileeditor@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/codemirror": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/documentsearch": ^4.0.6 + "@jupyterlab/lsp": ^4.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/toc": ^6.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + regexp-match-indices: ^1.0.2 + checksum: cc70beea6dffe131574a73106e9381c80fe05b440f00f37312e4c12a0995dd22989f414916f4b450d455db20bf28d9ea3c2ef339e5ecfd45e61ce433c0bb8a0a + languageName: node + linkType: hard + +"@jupyterlab/galata@npm:^5.0.6": + version: 5.0.6 + resolution: "@jupyterlab/galata@npm:5.0.6" + dependencies: + "@jupyterlab/application": ^4.0.6 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/debugger": ^4.0.6 + "@jupyterlab/docmanager": ^4.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/notebook": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/settingregistry": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@playwright/test": ^1.32.2 + "@stdlib/stats": ~0.0.13 + fs-extra: ^10.1.0 + json5: ^2.2.3 + path: ~0.12.7 + systeminformation: ^5.8.6 + vega: ^5.20.0 + vega-lite: ^5.6.1 + vega-statistics: ^1.7.9 + checksum: a854c580923335595e091a52fbf9e575eeaa3b08fe4a3a1bdaa5ef044b18058e51a50983205068d63d51943fbf3d63f47853bfba31935dc265e3ecf7432b210f + languageName: node + linkType: hard + +"@jupyterlab/git-ui-tests@workspace:.": + version: 0.0.0-use.local + resolution: "@jupyterlab/git-ui-tests@workspace:." + dependencies: + "@jupyterlab/galata": ^5.0.6 + "@playwright/test": ^1.37.0 + languageName: unknown + linkType: soft + +"@jupyterlab/lsp@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/lsp@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + lodash.mergewith: ^4.6.1 + vscode-jsonrpc: ^6.0.0 + vscode-languageserver-protocol: ^3.17.0 + vscode-ws-jsonrpc: ~1.0.2 + checksum: 7a20f402bd2777e5ec36efe3193357ae59a8d619516ccf34bb569afe68d32df2af2c77479216826a08fd6dc16952e1430f2465e1fd9878bf092ca8773e5e2d1e + languageName: node + linkType: hard + +"@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/nbformat@npm:4.0.6" + dependencies: + "@lumino/coreutils": ^2.1.2 + checksum: 43ace863be98a82875a55a947828b9b987cff35bb484e6cb6474c97f60aadbf31027c5f2fdf81b4ee2d108dc735b92c15c9b35cded765b0e476ebf0c8fd670f6 + languageName: node + linkType: hard + +"@jupyterlab/notebook@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/notebook@npm:4.0.6" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/cells": ^4.0.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/codemirror": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/documentsearch": ^4.0.6 + "@jupyterlab/lsp": ^4.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/settingregistry": ^4.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/toc": ^6.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 9ffb5f39b5e6d34fc2df2662c790121fda3880a271f0606bd56f3bcff416b43b1697640d43f0a30231fcf24a935e193ca9b5bf016d34675ede0e02e1185afffb + languageName: node + linkType: hard + +"@jupyterlab/observables@npm:^5.0.6": + version: 5.0.6 + resolution: "@jupyterlab/observables@npm:5.0.6" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + checksum: 23232972e6a049b2addeae1d445bc3a10bb6c9a3dd4794225a0344aaa1ff62421ee300ef8803a19a3f068d2bba2de8b9a8dec719a7f47019fbd77c8d5dafb7a0 + languageName: node + linkType: hard + +"@jupyterlab/outputarea@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/outputarea@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 2691fe7e4bdff895c821e970edbc19867107dbd8150aa7f32c7f3a4a7608f9ae9c7862dc5887fdca6983b9d6a947e05f23bbf5160c7c99eef93a0abf20d085a4 + languageName: node + linkType: hard + +"@jupyterlab/rendermime-interfaces@npm:^3.8.6": + version: 3.8.6 + resolution: "@jupyterlab/rendermime-interfaces@npm:3.8.6" + dependencies: + "@lumino/coreutils": ^1.11.0 || ^2.1.2 + "@lumino/widgets": ^1.37.2 || ^2.3.0 + checksum: 84ba0c3979e6ace6246e00248d1248075afb112f55be202257bb89a553b235d36ca82879c56f46f58285a5fc6d39914e93fea203c53245e0ac8d1b5ef838bb50 + languageName: node + linkType: hard + +"@jupyterlab/rendermime@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/rendermime@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + lodash.escape: ^4.0.1 + checksum: 8f44601ccd6abe9985f8f713dcabf48ae38246b8b5a17a3963ebfe298dc2a03cc49d1f99c6d3bfeadbe1eb74803d0b3138c01347693a99166d7d70cb832c400b + languageName: node + linkType: hard + +"@jupyterlab/services@npm:^7.0.6": + version: 7.0.6 + resolution: "@jupyterlab/services@npm:7.0.6" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/settingregistry": ^4.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + ws: ^8.11.0 + checksum: 6e12ef309559977209e61ce3ec8ca74aa486d54f50d8f38211b684055fb2335a21c2ae6e846d2863e48524bffd7d6ac4d36dfc9f7ca610ae4b1c60752fa6c3a8 + languageName: node + linkType: hard + +"@jupyterlab/settingregistry@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/settingregistry@npm:4.0.6" + dependencies: + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@rjsf/utils": ^5.1.0 + ajv: ^8.12.0 + json5: ^2.2.3 + peerDependencies: + react: ">=16" + checksum: 70b6fc44a25e0d4ec36501c1418fe2764b9a9415f892df0901c43480b608a1621141ec8045183dfbca5aedf11ebaf1518dd76e2e96373b9ebe0efa6586ce856d + languageName: node + linkType: hard + +"@jupyterlab/statedb@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/statedb@npm:4.0.6" + dependencies: + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + checksum: de507d094afcce7f7d12f9dc846788765616140b2f75ea22997f780056baaaadae0cf9683471a1d96c61d448b38860640c823302aeef0d5e5d7c9cf598074328 + languageName: node + linkType: hard + +"@jupyterlab/statusbar@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/statusbar@npm:4.0.6" + dependencies: + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: c5d579b101e19670182d87de0d601fc9c73c40b5a81120e18e6cd7853ee9fd744fa31524f24b2c92cb587bb2d6aa54c08f6e257d868426a73d968e48b1101b7c + languageName: node + linkType: hard + +"@jupyterlab/toc@npm:^6.0.6": + version: 6.0.6 + resolution: "@jupyterlab/toc@npm:6.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: d8d955a00e6678c50f73f18205dd79d77c752c3b0d33699554cdb77c3501657708c699642889975c97b58a85704c3bca40de01019ce087f188681bb843f35c3a + languageName: node + linkType: hard + +"@jupyterlab/translation@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/translation@npm:4.0.6" + dependencies: + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + checksum: 490243a26898bbdcc1909e8e1649be90580c6d4502417590fd1b3ca24db5aeff2323e567dbfb1d528c56df89ed2e7717753ece784134f9e409d14df92bf25682 + languageName: node + linkType: hard + +"@jupyterlab/ui-components@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/ui-components@npm:4.0.6" + dependencies: + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/translation": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + "@rjsf/core": ^5.1.0 + "@rjsf/utils": ^5.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + typestyle: ^2.0.4 + peerDependencies: + react: ^18.2.0 + checksum: 02997c3c35c15c0eda6a0d49fe9cfd12a3c5194c026b2ae8d8e53c7af80b769ba1598e7c24283450bacae7b8fab838d18f6c614d686c98d3d43e68f1f00b2528 + languageName: node + linkType: hard + +"@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.0.2, @lezer/common@npm:^1.1.0": + version: 1.1.0 + resolution: "@lezer/common@npm:1.1.0" + checksum: 93c208a44d1c0bdf7407853ba7c4ddcedf1c52d1b82170813d83b9bd6301aa23587405ac54332fe39ce8bc37f706936ab237ceb4d3d535d1dead650153b6474c + languageName: node + linkType: hard + +"@lezer/cpp@npm:^1.0.0": + version: 1.1.1 + resolution: "@lezer/cpp@npm:1.1.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: c9e1db19776eafbfe0c3b8448d46c94d9a1d30f7fef630292e63bab82e6d5d6903a043ee8cf341bcbf84c00ee0d79b8c255bab8fd8e0a91355ae912b53c78935 + languageName: node + linkType: hard + +"@lezer/css@npm:^1.0.0, @lezer/css@npm:^1.1.0": + version: 1.1.3 + resolution: "@lezer/css@npm:1.1.3" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: c8069ef0a6751441d2dc9180f7ebfd7aeb35df0ca2f1a748a2f26203a9ef6cc30f17f3074e2b49520453eb39329dadfdbbb901c6d9d067dc955ceb58c1f8cc6a + languageName: node + linkType: hard + +"@lezer/generator@npm:^1.2.2": + version: 1.5.1 + resolution: "@lezer/generator@npm:1.5.1" + dependencies: + "@lezer/common": ^1.0.2 + "@lezer/lr": ^1.3.0 + bin: + lezer-generator: src/lezer-generator.cjs + checksum: 4d8267e6d356e48ca5214a234679b2b3b1d3706cb9dffecee4495b7a16c8a02502d6a078f8afdf5d8c79f94af34f2c1b5c08556aead8376d7b23795612b651d0 + languageName: node + linkType: hard + +"@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3, @lezer/highlight@npm:^1.1.4": + version: 1.1.6 + resolution: "@lezer/highlight@npm:1.1.6" + dependencies: + "@lezer/common": ^1.0.0 + checksum: 411a702394c4c996b7d7f145a38f3a85a8cc698b3918acc7121c629255bb76d4ab383753f69009e011dc415210c6acbbb5b27bde613259ab67e600b29397b03b + languageName: node + linkType: hard + +"@lezer/html@npm:^1.3.0": + version: 1.3.6 + resolution: "@lezer/html@npm:1.3.6" + dependencies: + "@lezer/common": ^1.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 1d3af781660968505e5083a34f31ea3549fd5f3949227fa93cc318bca61bce76ffe977bd875624ba938a2039834ec1a33df5d365e94c48131c85dd26f980d92c + languageName: node + linkType: hard + +"@lezer/java@npm:^1.0.0": + version: 1.0.4 + resolution: "@lezer/java@npm:1.0.4" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 97f5a2c2d733afba5dc57a0da9a97515b19b5e63bb5937717dac4e8c9baed74d15c0cb5c1580858b678931f11d517c56d89f903968fa48931f9c62e2ea67a107 + languageName: node + linkType: hard + +"@lezer/javascript@npm:^1.0.0": + version: 1.4.7 + resolution: "@lezer/javascript@npm:1.4.7" + dependencies: + "@lezer/highlight": ^1.1.3 + "@lezer/lr": ^1.3.0 + checksum: 37c05793e0e45280fa5d7b845a3132a84596105d48b7d2c195abea0a198477ea6719b07d1c8967679e80fc466388151956901fd6962479c130ffda64a6d09591 + languageName: node + linkType: hard + +"@lezer/json@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/json@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: fcd17178f6a58e71c83e08fdc047e3708528b28591ba8f08ed35268f370d1ec9b63af0afa9d82a77fec26e9eb477ab3cfdc31c951e080d118ef607f9f9bb52e3 + languageName: node + linkType: hard + +"@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.1.0, @lezer/lr@npm:^1.3.0": + version: 1.3.13 + resolution: "@lezer/lr@npm:1.3.13" + dependencies: + "@lezer/common": ^1.0.0 + checksum: aad0cb8908796a6b49116842fd490093aa0de54b48150a60a4f418815c014f7a1b4355615832e305caea5c0ba8c5ab577f82aebcd0ea04586b8199284ef0fec8 + languageName: node + linkType: hard + +"@lezer/markdown@npm:^1.0.0, @lezer/markdown@npm:^1.0.2": + version: 1.1.0 + resolution: "@lezer/markdown@npm:1.1.0" + dependencies: + "@lezer/common": ^1.0.0 + "@lezer/highlight": ^1.0.0 + checksum: b3699c0724dd41e3e6e3078a0e1bcd272ccaebf17b20e5160de3ecf26200cdaa59aa19c9542aac5ab8c7e3aecce1003544b016bb5c32e458bbd5982add8ca0bf + languageName: node + linkType: hard + +"@lezer/php@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/php@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.1.0 + checksum: a847c255c030b4d38913ddf1d5bd7324d83be7ef8d1d244542870be03b9bf7dc71283afeb2415c40dfd188cb99f0cc44bad760b5f3b7c35c3b8e5e00253848fc + languageName: node + linkType: hard + +"@lezer/python@npm:^1.1.4": + version: 1.1.8 + resolution: "@lezer/python@npm:1.1.8" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: e4a4e0b0fd871acff25111d4f767944b5015479776504b85c4431859c8a2859fdfa6362f204f3027cf9858c7ea907fd57244852a18b67da9eba3b2fe38d31b03 + languageName: node + linkType: hard + +"@lezer/rust@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/rust@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 1e02fdf09206979e7d4f87b020589f410c4c5e452a7b7b0296f6772ce3571c1bd7ed37495fbeeecf3d4423000f2efdabd462ba8a949c2b351fd35550327a7613 + languageName: node + linkType: hard + +"@lezer/xml@npm:^1.0.0": + version: 1.0.2 + resolution: "@lezer/xml@npm:1.0.2" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: e834bcc5c0dee3eecb5362b3f10187e80908b6a293ebacf5750547a64b57ec710a068497334f109ecf4e5ea05e09e7e9c00e48ebbd30050673ea67b0929e5398 + languageName: node + linkType: hard + +"@lumino/algorithm@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/algorithm@npm:2.0.1" + checksum: cbf7fcf6ee6b785ea502cdfddc53d61f9d353dcb9659343511d5cd4b4030be2ff2ca4c08daec42f84417ab0318a3d9972a17319fa5231693e109ab112dcf8000 + languageName: node + linkType: hard + +"@lumino/application@npm:^2.2.1": + version: 2.2.1 + resolution: "@lumino/application@npm:2.2.1" + dependencies: + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: a33e661703728440bc7d2ddb4674261f4de0d20eb8c9846646cbd6debac03b5c65e78d739a500903550fd83b8f47b47fa82ec178c97bc9967ca3ac4014075cde + languageName: node + linkType: hard + +"@lumino/collections@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/collections@npm:2.0.1" + dependencies: + "@lumino/algorithm": ^2.0.1 + checksum: 8a29b7973a388a33c5beda0819dcd2dc2aad51a8406dcfd4581b055a9f77a39dc5800f7a8b4ae3c0bb97ae7b56a7a869e2560ffb7a920a28e93b477ba05907d6 + languageName: node + linkType: hard + +"@lumino/commands@npm:^2.1.3": + version: 2.1.3 + resolution: "@lumino/commands@npm:2.1.3" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/keyboard": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + checksum: e4e3ee279f2a5e8d68e4ce142c880333f5542f90c684972402356936ecb5cf5e07163800b59e7cb8c911cbdb4e5089edcc5dd2990bc8db10c87517268de1fc5d + languageName: node + linkType: hard + +"@lumino/coreutils@npm:^1.11.0 || ^2.0.0, @lumino/coreutils@npm:^1.11.0 || ^2.1.2, @lumino/coreutils@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/coreutils@npm:2.1.2" + checksum: 7865317ac0676b448d108eb57ab5d8b2a17c101995c0f7a7106662d9fe6c859570104525f83ee3cda12ae2e326803372206d6f4c1f415a5b59e4158a7b81066f + languageName: node + linkType: hard + +"@lumino/datagrid@npm:^2.2.0": + version: 2.2.0 + resolution: "@lumino/datagrid@npm:2.2.0" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/keyboard": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: dcd6e06500c05b0f30b9924a25a2cc4c1cb98b8432f488148e74e98a7fe092a1f19cadbdc9edfbede9e2030d30b84e5633e40753fbe8d6bbb120d3336d3675ff + languageName: node + linkType: hard + +"@lumino/disposable@npm:^1.10.0 || ^2.0.0, @lumino/disposable@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/disposable@npm:2.1.2" + dependencies: + "@lumino/signaling": ^2.1.2 + checksum: ac2fb2bf18d0b2939fda454f3db248a0ff6e8a77b401e586d1caa9293b3318f808b93a117c9c3ac27cd17aab545aea83b49108d099b9b2f5503ae2a012fbc6e2 + languageName: node + linkType: hard + +"@lumino/domutils@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/domutils@npm:2.0.1" + checksum: 61fa0ab226869dfbb763fc426790cf5a43b7d6f4cea1364c6dd56d61c44bff05eea188d33ff847449608ef58ed343161bee15c19b96f35410e4ee35815dc611a + languageName: node + linkType: hard + +"@lumino/dragdrop@npm:^2.1.3": + version: 2.1.3 + resolution: "@lumino/dragdrop@npm:2.1.3" + dependencies: + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + checksum: d5f7eb4cc9f9a084cb9af10f02d6741b25d683350878ecbc324e24ba9d4b5246451a410e2ca5fff227aab1c191d1e73a2faf431f93e13111d67a4e426e126258 + languageName: node + linkType: hard + +"@lumino/keyboard@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/keyboard@npm:2.0.1" + checksum: cf33f13427a418efd7cc91061233321e860d5404f3d86397781028309bef86c8ad2d88276ffe335c1db0fe619bd9d1e60641c81f881696957a58703ee4652c3e + languageName: node + linkType: hard + +"@lumino/messaging@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/messaging@npm:2.0.1" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/collections": ^2.0.1 + checksum: 964c4651c374b17452b4252b7d71500b32d2ecd87c192fc5bcf5d3bd1070661d78d07edcac8eca7d1d6fd50aa25992505485e1296d6dd995691b8e349b652045 + languageName: node + linkType: hard + +"@lumino/polling@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/polling@npm:2.1.2" + dependencies: + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + checksum: fa9b401e6dbeb8f31d7e3ba485e8ef1e0c92b3f2da086239c0ed49931026f5d3528709193c93e031e35ac624fb4bbbfcdcbaa0e25eb797f36e2952e5cd91e9e3 + languageName: node + linkType: hard + +"@lumino/properties@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/properties@npm:2.0.1" + checksum: c50173a935148cc4148fdaea119df1d323ee004ae16ab666800388d27e9730345629662d85f25591683329b39f0cdae60ee8c94e8943b4d0ef7d7370a38128d6 + languageName: node + linkType: hard + +"@lumino/signaling@npm:^1.10.0 || ^2.0.0, @lumino/signaling@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/signaling@npm:2.1.2" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + checksum: ad7d7153db57980da899c43e412e6130316ef30b231a70250e7af49058db16cadb018c1417a2ea8083d83c48623cfe6b705fa82bf10216b1a8949aed9f4aca4e + languageName: node + linkType: hard + +"@lumino/virtualdom@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/virtualdom@npm:2.0.1" + dependencies: + "@lumino/algorithm": ^2.0.1 + checksum: cf59b6f15b430e13e9e657b7a0619b9056cd9ea7b2a87f407391d071c501b77403c302b6a66dca510382045e75b2e3fe551630bb391f1c6b33678057d4bec164 + languageName: node + linkType: hard + +"@lumino/widgets@npm:^1.37.2 || ^2.3.0, @lumino/widgets@npm:^2.3.0": + version: 2.3.0 + resolution: "@lumino/widgets@npm:2.3.0" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/keyboard": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + checksum: a8559bd3574b7fc16e7679e05994c515b0d3e78dada35786d161f67c639941d134e92ce31d95c2e4ac06709cdf83b0e7fb4b6414a3f7779579222a2fb525d025 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@playwright/test@npm:^1.32.2, @playwright/test@npm:^1.37.0": + version: 1.38.1 + resolution: "@playwright/test@npm:1.38.1" + dependencies: + playwright: 1.38.1 + bin: + playwright: cli.js + checksum: c5ec0b23261fe1ef163b6234f69263bc10e7e5a3fb676c7773ffc70b87459a7ab225f57c03b9de649475771638a04c2e00d9b2739304a4dcf5d3edf20a7a4a82 + languageName: node + linkType: hard + +"@rjsf/core@npm:^5.1.0": + version: 5.13.0 + resolution: "@rjsf/core@npm:5.13.0" + dependencies: + lodash: ^4.17.21 + lodash-es: ^4.17.21 + markdown-to-jsx: ^7.3.2 + nanoid: ^3.3.6 + prop-types: ^15.8.1 + peerDependencies: + "@rjsf/utils": ^5.12.x + react: ^16.14.0 || >=17 + checksum: d7d66d20fcdf310f4b152c22e1ac1ca8abe5f40b502711c9cabc4241b3252ec0e58345aa194529d2bdfb7a51b9f1179c9ddefc0cdc7fd9f94ad10c5e5b1032b8 + languageName: node + linkType: hard + +"@rjsf/utils@npm:^5.1.0": + version: 5.13.0 + resolution: "@rjsf/utils@npm:5.13.0" + dependencies: + json-schema-merge-allof: ^0.8.1 + jsonpointer: ^5.0.1 + lodash: ^4.17.21 + lodash-es: ^4.17.21 + react-is: ^18.2.0 + peerDependencies: + react: ^16.14.0 || >=17 + checksum: 283e2b405eac2f4fdd243b2e35ade7e83a4bf7551eb5e075499e8eb5d3a3ae161e9c047bcf63d2e6fef7c6b2e7438f1a150f353b909df992e85194940c311f9b + languageName: node + linkType: hard + +"@stdlib/array@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/array@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/complex": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 0d95690461f0c4560eabef0796d1170274415cd03de80333c6d39814d0484a6873ef4be04a64941ebf3a600747e84c3a4f23b21c7020e53842c07985331b39f1 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/assert@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/assert@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/complex": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/os": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/regexp": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: d4dcbeabbfb86ba56cdd972ff785f43e7d25018b2b1800cab8b0deb9e5c54c795d6ead3d142f4dd13c351f636deba4dc1857c85147d6b059fdc78eb2c9510b99 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/bigint@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/bigint@npm:0.0.11" + dependencies: + "@stdlib/utils": ^0.0.x + checksum: 7bf825d116e4b010e214209af239706ac1ef923eecb5c8b0af9229c9975450081355e441ecc7b4765d81a9e653141868e0492b8061d1e65724fa42fb8283aabd + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/blas@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/blas@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 67ea00a968f7a9c710b37f718b7f756e2830e479a1a1ee44cbf6ec3cc27dd8863078928867707d9d1624007e81de89d040f2326d10f435e2cce913cab121975e + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/buffer@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/buffer@npm:0.0.11" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 93df02e3bf548e940ff9cef65121566e7bf93b554f0614d62336c9dbccfc07c9f1b1c4e9a7aebbe4819ef16a6d2a33a7010c2fdf908fface8298a3109c3c4ef0 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/cli@npm:^0.0.x": + version: 0.0.10 + resolution: "@stdlib/cli@npm:0.0.10" + dependencies: + "@stdlib/utils": ^0.0.x + minimist: ^1.2.0 + checksum: bbece8d3dbff2835518582a7726c6c4c22743dc408d2303d9e35a3b72151d5d0a8e78d61bc896663d4c3fb702e966abea7a1bd621ed943723a359f57053f121f + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/complex@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/complex@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 8eda35027495417f1b0dd9bbbc2d4983f50ad3cf9e2276ffe0945ccdbe78f0fc66b9fc36ab71926d2a125c8fb7467c8970a222b230b42ff4bb8042c53314ca09 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/constants@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/constants@npm:0.0.11" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: fc19d055a4e71ae84b6c92e4a3a88371d50693da8f0a813df4063dc549374d19b9cf23f4fdae2fb7b2013e13929f713c3e1b9e4054767e741b75561ed43d15c3 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/fs@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/fs@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + checksum: 33ac5ee4844d4599fe3a8a8402f1a3e2cafee31a5c9cf5b85df530a61a2b54ef17dc30a67be98dacdc2958219413edd0e4cdc3c28266f4bc30277ee024f6a49e + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/math@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/math@npm:0.0.11" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/strided": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + checksum: 6c4c9dda36fbce50553e1437354c5286aa782c42399534dbed8e696ddeb1b91ef6cff5fe5962f1c9e1eb2ef63c63d9bd58f7ca4b87d59018aaac20099c3fb79a + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/ndarray@npm:^0.0.x": + version: 0.0.13 + resolution: "@stdlib/ndarray@npm:0.0.13" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/bigint": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/complex": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 842a94afce5fc74bf8a964b75a302ddb8713eadbc79616e6799f1310c8bce860ed9e9877adc4a39338d9136b8798947ee21cf03368d46408308a313c8075d49a + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/nlp@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/nlp@npm:0.0.11" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/random": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 398fe2853fb95404bb6598e3e199ca3e0435b94447d50e14e2e30582cadfb91f43464f23d80a0e1da4d64567a4a108a7299d7440509f1ab26b02aea7bb16e9a8 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/number@npm:^0.0.x": + version: 0.0.10 + resolution: "@stdlib/number@npm:0.0.10" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/os": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 326190956c787cbf9321c332beedab5ba4b3fa97d52a82aa708a0349b4678c0df7a351424f00a606f4eaca4fb4ba4cc191580c99d7c64ee0f08d37baa3de14f2 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/os@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/os@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 37156b0c723da70d7740d92d08fc592eae803461c1d546cff6ac044765d6e40722fdad342219277e747c39344b513096ac1d0aa1e733cf3079bd8a9a8578612a + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/process@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/process@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 6d5c3d943f9914d1ae39bd36ad7436f783cf64baa2bff67a808035c99258676ae3f704c328a78d62754951cf85fe99d8e9af5f4fa7d5f8cba347bca72767e357 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/random@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/random@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/stats": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + readable-stream: ^2.1.4 + checksum: 67fcb5553274f8596ceae91153e96ae297bacfd55279821cb09f19f2844845aaf892802e4a5962965323dbfded0c7df8a89a6ce77d60d5c8a5899d483055a964 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/regexp@npm:^0.0.x": + version: 0.0.13 + resolution: "@stdlib/regexp@npm:0.0.13" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: dd52adb096ff9a02d1c4818be2889ae01bc04a0cdbc0d52473685e0a7a4eaa13e1be603b964f140f7488d11450b644dc5f8c97029d77db1ed4a563554245ff1c + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/stats@npm:^0.0.x, @stdlib/stats@npm:~0.0.13": + version: 0.0.13 + resolution: "@stdlib/stats@npm:0.0.13" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/random": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 5ca12b2e123543f56a59aca828e14afaf525ad4aa40467bee7037a9178e21e55d4ce8ba3de9387cc9a0efe3e0d035d6c58705b12f634f77a2b3f87d334dfb076 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/streams@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/streams@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + readable-stream: ^2.1.4 + checksum: 231b4607d082ea81d9dadbeab08002ec398a29c7eb5d611d8a4183f9db6964428e2f8a9e0f8edd085ca12b5d58258576987a575e9d8f6fcabcb5a62c6b8efe88 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/strided@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/strided@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 55ccc8543596894a2e3ad734b394700c69697b499a54b3bfbcf80cddd8d91509792c23931f5cebf7c89269676ac3f44352582e4f42e2c2c2898363cc3a76403d + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/string@npm:^0.0.x": + version: 0.0.13 + resolution: "@stdlib/string@npm:0.0.13" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/nlp": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/regexp": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: dc9f79a2ec3011935f1f5f5bcaa4a4abe32c71988928e68cb945494a0d32d5dbf14d55628d072d329fcb603346d012d30b316d9512ab732cf92a4ed83b7ec371 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/symbol@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/symbol@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 2263341ce0296de2063d26038902bd63bf1d7b820307402fdf38c3b248bd026f17d96bccdc3189fd9fcc9c83a778eaab797dc11805bd66203b8ac9c6934f6588 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/time@npm:^0.0.x": + version: 0.0.14 + resolution: "@stdlib/time@npm:0.0.14" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 6e8a1b985a09936ab09c98d44bf1b2c79e08995c3c73401494bc1f6f708747ef136d769af4809a8af92a9ceb3d390db6c4c4e01608cd8d794a86c4b57e343eb1 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/types@npm:^0.0.x": + version: 0.0.13 + resolution: "@stdlib/types@npm:0.0.13" + checksum: b3ec932fd742be2cd2d67237540ceba22057c21fbaf574617c7c1af6e08ca67678fb6f76b6ef1a3dc414dffa0e6b9b05f7336eea4d8682b765ad5b58a5d3a5c0 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/utils@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/utils@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/os": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/random": ^0.0.x + "@stdlib/regexp": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/time": ^0.0.x + "@stdlib/types": ^0.0.x + debug: ^2.6.9 + checksum: e0c3671c5f62c11bb3abd721f2958c41641b00a75d449bd25fbb62bcb8689cfe9c1f600c0688e7b6819ae870d6e5974d0fc7b2ec86081c45d9194b316b2a2ec2 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@types/estree@npm:^1.0.0": + version: 1.0.0 + resolution: "@types/estree@npm:1.0.0" + checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443 + languageName: node + linkType: hard + +"@types/geojson@npm:^7946.0.10": + version: 7946.0.10 + resolution: "@types/geojson@npm:7946.0.10" + checksum: 12c407c2dc93ecb26c08af533ee732f1506a9b29456616ba7ba1d525df96206c28ddf44a528f6a5415d7d22893e9d967420940a9c095ee5e539c1eba5fefc1f4 + languageName: node + linkType: hard + +"@types/prop-types@npm:*": + version: 15.7.4 + resolution: "@types/prop-types@npm:15.7.4" + checksum: ef6e1899e59b876c273811b1bd845022fc66d5a3d11cb38a25b6c566b30514ae38fe20a40f67622f362a4f4f7f9224e22d8da101cff3d6e97e11d7b4c307cfc1 + languageName: node + linkType: hard + +"@types/react@npm:^18.0.26": + version: 18.2.25 + resolution: "@types/react@npm:18.2.25" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: 177515cd44135d56191ec6c5c10edd490c96c175d37624d9c37bc2007c3abcf6cc2d2137d2a073d692cdc5129d5d5785bd60a6ddd315f695da5d8b989fa2afc5 + languageName: node + linkType: hard + +"@types/scheduler@npm:*": + version: 0.16.2 + resolution: "@types/scheduler@npm:0.16.2" + checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc + languageName: node + linkType: hard + +"@vscode/debugprotocol@npm:^1.51.0": + version: 1.63.0 + resolution: "@vscode/debugprotocol@npm:1.63.0" + checksum: 084bd8c246da30e3c2099110efbf8beb9f1471ecb5471bb30e834ee041ef375df3076395b13096520ec5f6e531a4a8a5621f26e37da9c8648054340e9b00a273 + languageName: node + linkType: hard + +"abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: ^1.2.1 + checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv@npm:^8.12.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.4 + resolution: "cacache@npm:17.1.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^7.0.3 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"commander@npm:2": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:7": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc + languageName: node + linkType: hard + +"compute-gcd@npm:^1.2.1": + version: 1.2.1 + resolution: "compute-gcd@npm:1.2.1" + dependencies: + validate.io-array: ^1.0.3 + validate.io-function: ^1.0.2 + validate.io-integer-array: ^1.0.0 + checksum: 51cf33b75f7c8db5142fcb99a9d84a40260993fed8e02a7ab443834186c3ab99b3fd20b30ad9075a6a9d959d69df6da74dd3be8a59c78d9f2fe780ebda8242e1 + languageName: node + linkType: hard + +"compute-lcm@npm:^1.1.2": + version: 1.1.2 + resolution: "compute-lcm@npm:1.1.2" + dependencies: + compute-gcd: ^1.2.1 + validate.io-array: ^1.0.3 + validate.io-function: ^1.0.2 + validate.io-integer-array: ^1.0.0 + checksum: d499ab57dcb48e8d0fd233b99844a06d1cc56115602c920c586e998ebba60293731f5b6976e8a1e83ae6cbfe86716f62d9432e8d94913fed8bd8352f447dc917 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"crelt@npm:^1.0.5": + version: 1.0.6 + resolution: "crelt@npm:1.0.6" + checksum: dad842093371ad702afbc0531bfca2b0a8dd920b23a42f26e66dabbed9aad9acd5b9030496359545ef3937c3aced0fd4ac39f7a2d280a23ddf9eb7fdcb94a69f + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"csstype@npm:2.6.9": + version: 2.6.9 + resolution: "csstype@npm:2.6.9" + checksum: b1ce577f9d9b1dc96d0270450ca7b5d8711cc3a9c4a5a2b1d8d64a313337c34489ef82a49875828e716b64af6a2a9e13488c42480eb4c9c9436cf3ca2265f4fd + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.0.10 + resolution: "csstype@npm:3.0.10" + checksum: 20a8fa324f2b33ddf94aa7507d1b6ab3daa6f3cc308888dc50126585d7952f2471de69b2dbe0635d1fdc31223fef8e070842691877e725caf456e2378685a631 + languageName: node + linkType: hard + +"d3-array@npm:1 - 3, d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:2.5.0 - 3, d3-array@npm:3.2.2, d3-array@npm:^3.2.2": + version: 3.2.2 + resolution: "d3-array@npm:3.2.2" + dependencies: + internmap: 1 - 2 + checksum: 98af3db792685ceca5d9c3721efba0c567520da5532b2c7a590fd83627a598ea225d11c2cecbad404dc154120feb5ea6df0ded38f82ddf342c714cfd0c6143d1 + languageName: node + linkType: hard + +"d3-color@npm:1 - 3, d3-color@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-color@npm:3.1.0" + checksum: 4931fbfda5d7c4b5cfa283a13c91a954f86e3b69d75ce588d06cde6c3628cebfc3af2069ccf225e982e8987c612aa7948b3932163ce15eb3c11cd7c003f3ee3b + languageName: node + linkType: hard + +"d3-delaunay@npm:^6.0.2": + version: 6.0.2 + resolution: "d3-delaunay@npm:6.0.2" + dependencies: + delaunator: 5 + checksum: 80b18686dd7a5919a570000061f1515d106b7c7e3cba9da55706c312fc8f6de58a72674f2ea4eadc6694611f2df59f82c8b9d304845dd8b7903ee1f303aa5865 + languageName: node + linkType: hard + +"d3-dispatch@npm:1 - 3": + version: 3.0.1 + resolution: "d3-dispatch@npm:3.0.1" + checksum: fdfd4a230f46463e28e5b22a45dd76d03be9345b605e1b5dc7d18bd7ebf504e6c00ae123fd6d03e23d9e2711e01f0e14ea89cd0632545b9f0c00b924ba4be223 + languageName: node + linkType: hard + +"d3-dsv@npm:^3.0.1": + version: 3.0.1 + resolution: "d3-dsv@npm:3.0.1" + dependencies: + commander: 7 + iconv-lite: 0.6 + rw: 1 + bin: + csv2json: bin/dsv2json.js + csv2tsv: bin/dsv2dsv.js + dsv2dsv: bin/dsv2dsv.js + dsv2json: bin/dsv2json.js + json2csv: bin/json2dsv.js + json2dsv: bin/json2dsv.js + json2tsv: bin/json2dsv.js + tsv2csv: bin/dsv2dsv.js + tsv2json: bin/dsv2json.js + checksum: 5fc0723647269d5dccd181d74f2265920ab368a2868b0b4f55ffa2fecdfb7814390ea28622cd61ee5d9594ab262879509059544e9f815c54fe76fbfb4ffa4c8a + languageName: node + linkType: hard + +"d3-force@npm:^3.0.0": + version: 3.0.0 + resolution: "d3-force@npm:3.0.0" + dependencies: + d3-dispatch: 1 - 3 + d3-quadtree: 1 - 3 + d3-timer: 1 - 3 + checksum: 6c7e96438cab62fa32aeadb0ade3297b62b51f81b1b38b0a60a5ec9fd627d74090c1189654d92df2250775f31b06812342f089f1d5947de9960a635ee3581def + languageName: node + linkType: hard + +"d3-format@npm:1 - 3, d3-format@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-format@npm:3.1.0" + checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 + languageName: node + linkType: hard + +"d3-geo-projection@npm:^4.0.0": + version: 4.0.0 + resolution: "d3-geo-projection@npm:4.0.0" + dependencies: + commander: 7 + d3-array: 1 - 3 + d3-geo: 1.12.0 - 3 + bin: + geo2svg: bin/geo2svg.js + geograticule: bin/geograticule.js + geoproject: bin/geoproject.js + geoquantize: bin/geoquantize.js + geostitch: bin/geostitch.js + checksum: 631422b10dd78d1047ba5a3b073148bea27721060bd7087a5fa6c053ca80445d26432e505e0e3acbd6e0d76cf577c61bf9a5db70dabbc9310c493de1f7ff736d + languageName: node + linkType: hard + +"d3-geo@npm:1.12.0 - 3, d3-geo@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-geo@npm:3.1.0" + dependencies: + d3-array: 2.5.0 - 3 + checksum: adf82b0c105c0c5951ae0a833d4dfc479a563791ad7938579fa14e1cffd623b469d8aa7a37dc413a327fb6ac56880f3da3f6c43d4abe3c923972dd98f34f37d1 + languageName: node + linkType: hard + +"d3-hierarchy@npm:^3.1.2": + version: 3.1.2 + resolution: "d3-hierarchy@npm:3.1.2" + checksum: 0fd946a8c5fd4686d43d3e11bbfc2037a145fda29d2261ccd0e36f70b66af6d7638e2c0c7112124d63fc3d3127197a00a6aecf676bd5bd392a94d7235a214263 + languageName: node + linkType: hard + +"d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1": + version: 3.0.1 + resolution: "d3-interpolate@npm:3.0.1" + dependencies: + d3-color: 1 - 3 + checksum: a42ba314e295e95e5365eff0f604834e67e4a3b3c7102458781c477bd67e9b24b6bb9d8e41ff5521050a3f2c7c0c4bbbb6e187fd586daa3980943095b267e78b + languageName: node + linkType: hard + +"d3-path@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-path@npm:3.1.0" + checksum: 2306f1bd9191e1eac895ec13e3064f732a85f243d6e627d242a313f9777756838a2215ea11562f0c7630c7c3b16a19ec1fe0948b1c82f3317fac55882f6ee5d8 + languageName: node + linkType: hard + +"d3-quadtree@npm:1 - 3": + version: 3.0.1 + resolution: "d3-quadtree@npm:3.0.1" + checksum: 5469d462763811475f34a7294d984f3eb100515b0585ca5b249656f6b1a6e99b20056a2d2e463cc9944b888896d2b1d07859c50f9c0cf23438df9cd2e3146066 + languageName: node + linkType: hard + +"d3-scale@npm:^4.0.2": + version: 4.0.2 + resolution: "d3-scale@npm:4.0.2" + dependencies: + d3-array: 2.10.0 - 3 + d3-format: 1 - 3 + d3-interpolate: 1.2.0 - 3 + d3-time: 2.1.1 - 3 + d3-time-format: 2 - 4 + checksum: a9c770d283162c3bd11477c3d9d485d07f8db2071665f1a4ad23eec3e515e2cefbd369059ec677c9ac849877d1a765494e90e92051d4f21111aa56791c98729e + languageName: node + linkType: hard + +"d3-shape@npm:^3.2.0": + version: 3.2.0 + resolution: "d3-shape@npm:3.2.0" + dependencies: + d3-path: ^3.1.0 + checksum: de2af5fc9a93036a7b68581ca0bfc4aca2d5a328aa7ba7064c11aedd44d24f310c20c40157cb654359d4c15c3ef369f95ee53d71221017276e34172c7b719cfa + languageName: node + linkType: hard + +"d3-time-format@npm:2 - 4, d3-time-format@npm:^4.1.0": + version: 4.1.0 + resolution: "d3-time-format@npm:4.1.0" + dependencies: + d3-time: 1 - 3 + checksum: 7342bce28355378152bbd4db4e275405439cabba082d9cd01946d40581140481c8328456d91740b0fe513c51ec4a467f4471ffa390c7e0e30ea30e9ec98fcdf4 + languageName: node + linkType: hard + +"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-time@npm:3.1.0" + dependencies: + d3-array: 2 - 3 + checksum: 613b435352a78d9f31b7f68540788186d8c331b63feca60ad21c88e9db1989fe888f97f242322ebd6365e45ec3fb206a4324cd4ca0dfffa1d9b5feb856ba00a7 + languageName: node + linkType: hard + +"d3-timer@npm:1 - 3, d3-timer@npm:^3.0.1": + version: 3.0.1 + resolution: "d3-timer@npm:3.0.1" + checksum: 1cfddf86d7bca22f73f2c427f52dfa35c49f50d64e187eb788dcad6e927625c636aa18ae4edd44d084eb9d1f81d8ca4ec305dae7f733c15846a824575b789d73 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.3": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.2.2 + resolution: "deepmerge@npm:4.2.2" + checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b + languageName: node + linkType: hard + +"delaunator@npm:5": + version: 5.0.0 + resolution: "delaunator@npm:5.0.0" + dependencies: + robust-predicates: ^3.0.0 + checksum: d6764188442b7f7c6bcacebd96edc00e35f542a96f1af3ef600e586bfb9849a3682c489c0ab423440c90bc4c7cac77f28761babff76fa29e193e1cf50a95b860 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.3.2 + resolution: "dom-serializer@npm:1.3.2" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.2.0 + entities: ^2.0.0 + checksum: bff48714944d67b160db71ba244fb0f3fe72e77ef2ec8414e2eeb56f2d926e404a13456b8b83a5392e217ba47dec2ec0c368801b31481813e94d185276c3e964 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": + version: 2.2.0 + resolution: "domelementtype@npm:2.2.0" + checksum: 24cb386198640cd58aa36f8c987f2ea61859929106d06ffcc8f547e70cb2ed82a6dc56dcb8252b21fba1f1ea07df6e4356d60bfe57f77114ca1aed6828362629 + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0": + version: 4.3.0 + resolution: "domhandler@npm:4.3.0" + dependencies: + domelementtype: ^2.2.0 + checksum: d2a2dbf40dd99abf936b65ad83c6b530afdb3605a87cad37a11b5d9220e68423ebef1b86c89e0f6d93ffaf315cc327cf1a988652e7a9a95cce539e3984f4c64d + languageName: node + linkType: hard + +"domutils@npm:^2.5.2": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: ^1.0.1 + domelementtype: ^2.2.0 + domhandler: ^4.2.0 + checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"free-style@npm:3.1.0": + version: 3.1.0 + resolution: "free-style@npm:3.1.0" + checksum: 949258ae315deda48cac93ecd5f9a80f36e8a027e19ce2103598dc8d5ab60e963bbad5444b2a4990ddb746798dd188896f430285cf484afbf2141f7d75a191d8 + languageName: node + linkType: hard + +"fs-extra@npm:^10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: latest + checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@2.3.2#~builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + 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 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"htmlparser2@npm:^6.0.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.0.0 + domutils: ^2.5.2 + entities: ^2.0.0 + checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"iconv-lite@npm:0.6, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.3, inherits@npm:^2.0.3, inherits@npm:~2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 + languageName: node + linkType: hard + +"internmap@npm:1 - 2": + version: 1.0.1 + resolution: "internmap@npm:1.0.1" + checksum: 9d00f8c0cf873a24a53a5a937120dab634c41f383105e066bb318a61864e6292d24eb9516e8e7dccfb4420ec42ca474a0f28ac9a6cc82536898fa09bbbe53813 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isomorphic.js@npm:^0.2.4": + version: 0.2.4 + resolution: "isomorphic.js@npm:0.2.4" + checksum: 7adb91495de1ff0af9a524cb7ffccde7984ea7c547f3b9fe387b51a2be6c3f607a086d253224a985cf55a28e41d57f5cb22e285543e95ab97e7ba36783f2cd81 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"json-schema-compare@npm:^0.2.2": + version: 0.2.2 + resolution: "json-schema-compare@npm:0.2.2" + dependencies: + lodash: ^4.17.4 + checksum: dd6f2173857c8e3b77d6ebdfa05bd505bba5b08709ab46b532722f5d1c33b5fee1fc8f3c97d0c0d011db25f9f3b0baf7ab783bb5f55c32abd9f1201760e43c2c + languageName: node + linkType: hard + +"json-schema-merge-allof@npm:^0.8.1": + version: 0.8.1 + resolution: "json-schema-merge-allof@npm:0.8.1" + dependencies: + compute-lcm: ^1.1.2 + json-schema-compare: ^0.2.2 + lodash: ^4.17.20 + checksum: 82700f6ac77351959138d6b153d77375a8c29cf48d907241b85c8292dd77aabd8cb816400f2b0d17062c4ccc8893832ec4f664ab9c814927ef502e7a595ea873 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad + languageName: node + linkType: hard + +"json-stringify-pretty-compact@npm:~3.0.0": + version: 3.0.0 + resolution: "json-stringify-pretty-compact@npm:3.0.0" + checksum: 01ab5c5c8260299414868d96db97f53aef93c290fe469edd9a1363818e795006e01c952fa2fd7b47cbbab506d5768998eccc25e1da4fa2ccfebd1788c6098791 + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jsonpointer@npm:^5.0.1": + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c + languageName: node + linkType: hard + +"lib0@npm:^0.2.42, lib0@npm:^0.2.72": + version: 0.2.73 + resolution: "lib0@npm:0.2.73" + dependencies: + isomorphic.js: ^0.2.4 + bin: + 0gentesthtml: bin/gentesthtml.js + 0serve: bin/0serve.js + checksum: a9a73513ef6e91a47602ae650483eed7a8f803c512dbea3e08ef1162bd63b463230c6cdcac4ca40d01925b24218398aa3fc3c16692227384eaa326968a220815 + languageName: node + linkType: hard + +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 + languageName: node + linkType: hard + +"lodash.escape@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.escape@npm:4.0.1" + checksum: fcb54f457497256964d619d5cccbd80a961916fca60df3fe0fa3e7f052715c2944c0ed5aefb4f9e047d127d44aa2d55555f3350cb42c6549e9e293fb30b41e7f + languageName: node + linkType: hard + +"lodash.mergewith@npm:^4.6.1": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 + languageName: node + linkType: hard + +"lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + +"markdown-to-jsx@npm:^7.3.2": + version: 7.3.2 + resolution: "markdown-to-jsx@npm:7.3.2" + peerDependencies: + react: ">= 0.14.0" + checksum: 8885c6343b71570b0a7ec16cd85a49b853a830234790ee7430e2517ea5d8d361ff138bd52147f650790f3e7b3a28a15c755fc16f8856dd01ddf09a6161782e06 + languageName: node + linkType: hard + +"minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:~1.2.0": + version: 1.2.6 + resolution: "minimist@npm:1.2.6" + checksum: d15428cd1e11eb14e1233bcfb88ae07ed7a147de251441d61158619dfb32c4d7e9061d09cab4825fdee18ecd6fce323228c8c47b5ba7cd20af378ca4048fb3fb + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + +"ms@npm:2.1.2, ms@npm:^2.0.0": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"nanoid@npm:^3.2.0, nanoid@npm:^3.3.6": + version: 3.3.6 + resolution: "nanoid@npm:3.3.6" + bin: + nanoid: bin/nanoid.cjs + checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.7": + version: 2.6.9 + resolution: "node-fetch@npm:2.6.9" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: acb04f9ce7224965b2b59e71b33c639794d8991efd73855b0b250921382b38331ffc9d61bce502571f6cc6e11a8905ca9b1b6d4aeb586ab093e2756a1fd190d0 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^11.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"parse-srcset@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-srcset@npm:1.0.2" + checksum: 3a0380380c6082021fcce982f0b89fb8a493ce9dfd7d308e5e6d855201e80db8b90438649b31fdd82a3d6089a8ca17dccddaa2b730a718389af4c037b8539ebf + languageName: node + linkType: hard + +"path-browserify@npm:^1.0.0": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"path@npm:~0.12.7": + version: 0.12.7 + resolution: "path@npm:0.12.7" + dependencies: + process: ^0.11.1 + util: ^0.10.3 + checksum: 5dedb71e78fc008fcba797defc0b4e1cf06c1f18e0a631e03ba5bb505136f587ff017afc14f9a3d481cbe77aeedff7dc0c1d2ce4d820c1ebf3c4281ca49423a1 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"playwright-core@npm:1.38.1": + version: 1.38.1 + resolution: "playwright-core@npm:1.38.1" + bin: + playwright-core: cli.js + checksum: 66e83fe040f309b13ad94ba39dea40ac207bfcbbc22de13141af88dbdedd64e1c4e3ce1d0cb070d4efd8050d7e579953ec3681dd8a0acf2c1cc738d9c50e545e + languageName: node + linkType: hard + +"playwright@npm:1.38.1": + version: 1.38.1 + resolution: "playwright@npm:1.38.1" + dependencies: + fsevents: 2.3.2 + playwright-core: 1.38.1 + dependenciesMeta: + fsevents: + optional: true + bin: + playwright: cli.js + checksum: 4e01d4ee52d9ccf75a80d8492829106802590721d56bff7c5957ff1f21eb3c328ee5bc3c1784a59c4b515df1b98d08ef92e4a35a807f454cd00dc481d30fadc2 + languageName: node + linkType: hard + +"postcss@npm:^8.3.11": + version: 8.4.6 + resolution: "postcss@npm:8.4.6" + dependencies: + nanoid: ^3.2.0 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: 60e7808f39c4a9d0fa067bfd5eb906168c4eb6d3ff0093f7d314d1979b001a16363deedccd368a7df869c63ad4ae350d27da439c94ff3fb0f8fc93d49fe38a90 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"process@npm:^0.11.1": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.1.1 + resolution: "punycode@npm:2.1.1" + checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + scheduler: ^0.23.0 + peerDependencies: + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc + languageName: node + linkType: hard + +"react-is@npm:^16.13.1": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^18.2.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"react@npm:^18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b + languageName: node + linkType: hard + +"readable-stream@npm:^2.1.4": + version: 2.3.7 + resolution: "readable-stream@npm:2.3.7" + 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 + checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 + languageName: node + linkType: hard + +"readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"regexp-match-indices@npm:^1.0.2": + version: 1.0.2 + resolution: "regexp-match-indices@npm:1.0.2" + dependencies: + regexp-tree: ^0.1.11 + checksum: 8cc779f6cf8f404ead828d09970a7d4bd66bd78d43ab9eb2b5e65f2ef2ba1ed53536f5b5fa839fb90b350365fb44b6a851c7f16289afc3f37789c113ab2a7916 + languageName: node + linkType: hard + +"regexp-tree@npm:^0.1.11": + version: 0.1.27 + resolution: "regexp-tree@npm:0.1.27" + bin: + regexp-tree: bin/regexp-tree + checksum: 129aebb34dae22d6694ab2ac328be3f99105143737528ab072ef624d599afecbcfae1f5c96a166fa9e5f64fa1ecf30b411c4691e7924c3e11bbaf1712c260c54 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"robust-predicates@npm:^3.0.0": + version: 3.0.1 + resolution: "robust-predicates@npm:3.0.1" + checksum: 45e9de2df4380da84a2a561d4fd54ea92194e878b93ed19d5e4bc90f4e834a13755e846c8516bab8360190309696f0564a0150386c52ef01f70f2b388449dac5 + languageName: node + linkType: hard + +"rw@npm:1": + version: 1.3.3 + resolution: "rw@npm:1.3.3" + checksum: c20d82421f5a71c86a13f76121b751553a99cd4a70ea27db86f9b23f33db941f3f06019c30f60d50c356d0bd674c8e74764ac146ea55e217c091bde6fba82aa3 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sanitize-html@npm:~2.7.3": + version: 2.7.3 + resolution: "sanitize-html@npm:2.7.3" + dependencies: + deepmerge: ^4.2.2 + escape-string-regexp: ^4.0.0 + htmlparser2: ^6.0.0 + is-plain-object: ^5.0.0 + parse-srcset: ^1.0.2 + postcss: ^8.3.11 + checksum: 2399d1fdbbc3a263fb413c1fe1971b3dc2b51abc6cc5cb49490624539d1c57a8fe31e2b21408c118e2a957f4e673e3169b1f9a5807654408f17b130a9d78aed7 + languageName: node + linkType: hard + +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" + dependencies: + loose-envify: ^1.1.0 + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1, string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"style-mod@npm:^4.0.0, style-mod@npm:^4.1.0": + version: 4.1.0 + resolution: "style-mod@npm:4.1.0" + checksum: 8402b14ca11113a3640d46b3cf7ba49f05452df7846bc5185a3535d9b6a64a3019e7fb636b59ccbb7816aeb0725b24723e77a85b05612a9360e419958e13b4e6 + languageName: node + linkType: hard + +"systeminformation@npm:^5.8.6": + version: 5.21.8 + resolution: "systeminformation@npm:5.21.8" + bin: + systeminformation: lib/cli.js + checksum: 302b8b430a5b0a7009be95c086b1bc43db3ecfd6ecab6cf654ae3312240f616823505f15a080a70f2335a9e5aab45d789aaba018843c9a9f8f18117aa32dce8a + conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android) + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + +"topojson-client@npm:^3.1.0": + version: 3.1.0 + resolution: "topojson-client@npm:3.1.0" + dependencies: + commander: 2 + bin: + topo2geo: bin/topo2geo + topomerge: bin/topomerge + topoquantize: bin/topoquantize + checksum: 8c029a4f18324ace0b8b55dd90edbd40c9e3c6de18bafbb5da37ca20ebf20e26fbd4420891acb3c2c264e214185f7557871f5651a9eee517028663be98d836de + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"tslib@npm:~2.6.2": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + +"typestyle@npm:^2.0.4": + version: 2.2.0 + resolution: "typestyle@npm:2.2.0" + dependencies: + csstype: 2.6.9 + free-style: 3.1.0 + checksum: da276bce95e173868bebfb52ee02c11547d8ef26026a4dbef7b5598751aa689a8631dfbdc5fa3ff02f8018ef79b9cf91ec73f170110dc04687e05dfa71a08da1 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.0 + resolution: "universalify@npm:2.0.0" + checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"url-parse@npm:~1.5.4": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"util@npm:^0.10.3": + version: 0.10.4 + resolution: "util@npm:0.10.4" + dependencies: + inherits: 2.0.3 + checksum: 913f9a90d05a60e91f91af01b8bd37e06bca4cc02d7b49e01089f9d5b78be2fffd61fb1a41b517de7238c5fc7337fa939c62d1fb4eb82e014894c7bee6637aaf + languageName: node + linkType: hard + +"validate.io-array@npm:^1.0.3": + version: 1.0.6 + resolution: "validate.io-array@npm:1.0.6" + checksum: 54eca83ebc702e3e46499f9d9e77287a95ae25c4e727cd2fafee29c7333b3a36cca0c5d8f090b9406262786de80750fba85e7e7ef41e20bf8cc67d5570de449b + languageName: node + linkType: hard + +"validate.io-function@npm:^1.0.2": + version: 1.0.2 + resolution: "validate.io-function@npm:1.0.2" + checksum: e4cce2479a20cb7c42e8630c777fb107059c27bc32925f769e3a73ca5fd62b4892d897b3c80227e14d5fcd1c5b7d05544e0579d63e59f14034c0052cda7f7c44 + languageName: node + linkType: hard + +"validate.io-integer-array@npm:^1.0.0": + version: 1.0.0 + resolution: "validate.io-integer-array@npm:1.0.0" + dependencies: + validate.io-array: ^1.0.3 + validate.io-integer: ^1.0.4 + checksum: 5f6d7fab8df7d2bf546a05e830201768464605539c75a2c2417b632b4411a00df84b462f81eac75e1be95303e7e0ac92f244c137424739f4e15cd21c2eb52c7f + languageName: node + linkType: hard + +"validate.io-integer@npm:^1.0.4": + version: 1.0.5 + resolution: "validate.io-integer@npm:1.0.5" + dependencies: + validate.io-number: ^1.0.3 + checksum: 88b3f8bb5a5277a95305d64abbfc437079220ce4f57a148cc6113e7ccec03dd86b10a69d413982602aa90a62b8d516148a78716f550dcd3aff863ac1c2a7a5e6 + languageName: node + linkType: hard + +"validate.io-number@npm:^1.0.3": + version: 1.0.3 + resolution: "validate.io-number@npm:1.0.3" + checksum: 42418aeb6c969efa745475154fe576809b02eccd0961aad0421b090d6e7a12d23a3e28b0d5dddd2c6347c1a6bdccb82bba5048c716131cd20207244d50e07282 + languageName: node + linkType: hard + +"vega-canvas@npm:^1.2.6, vega-canvas@npm:^1.2.7": + version: 1.2.7 + resolution: "vega-canvas@npm:1.2.7" + checksum: 6ff92fcdf0c359f2f662909c859a7f4cb4a502436136ab2f4c02373c47a621996ec0eea23e2108f11d62a618be301de86cd8528b5058c2e207a53ddd7ff58d1b + languageName: node + linkType: hard + +"vega-crossfilter@npm:~4.1.1": + version: 4.1.1 + resolution: "vega-crossfilter@npm:4.1.1" + dependencies: + d3-array: ^3.2.2 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: e399f7e92d7ba273ad5c1a9e29d362a9ec7feaeacb976eff3aa205b318382fb37a9fac3150ec1cb806364cd2b2cb54d5f23aea3285db684df2b4c27836422464 + languageName: node + linkType: hard + +"vega-dataflow@npm:^5.7.3, vega-dataflow@npm:^5.7.5, vega-dataflow@npm:~5.7.5": + version: 5.7.5 + resolution: "vega-dataflow@npm:5.7.5" + dependencies: + vega-format: ^1.1.1 + vega-loader: ^4.5.1 + vega-util: ^1.17.1 + checksum: 917ed63e88b0871169a883f68da127a404d88e50c9ed6fa3f063a706016b064594fb804a2bf99f09bc4a899819cac320bdde12467edc861af1acc024552dd202 + languageName: node + linkType: hard + +"vega-encode@npm:~4.9.1": + version: 4.9.1 + resolution: "vega-encode@npm:4.9.1" + dependencies: + d3-array: ^3.2.2 + d3-interpolate: ^3.0.1 + vega-dataflow: ^5.7.5 + vega-scale: ^7.3.0 + vega-util: ^1.17.1 + checksum: 2d95623438832d43f0c9266349e0d9ad5b1eee24477d4561d886fbb62c3f031ea430370633193471fcbffcc8d629e290e07c64dbc975929bf4c721f953408640 + languageName: node + linkType: hard + +"vega-event-selector@npm:^3.0.1, vega-event-selector@npm:~3.0.1": + version: 3.0.1 + resolution: "vega-event-selector@npm:3.0.1" + checksum: 66d09b5800a19a9b0c75f28811b140a1a2e70e84be6d6f87c568cdbce6e17c8e195f130f4e3de5d6dc737142d1f46f4fe7645177e154582cc8ba27c6845b54e8 + languageName: node + linkType: hard + +"vega-expression@npm:^5.0.1, vega-expression@npm:~5.1.0": + version: 5.1.0 + resolution: "vega-expression@npm:5.1.0" + dependencies: + "@types/estree": ^1.0.0 + vega-util: ^1.17.1 + checksum: 0355ebb6edd8f2ccc2dcf277a29b42b13f971725443212ce8a64cb8a02049f75f0add7ca9afcd3bc6744b93be791b526e7f983d9080d5052e9b0ca55bd488ae5 + languageName: node + linkType: hard + +"vega-expression@npm:~5.0.1": + version: 5.0.1 + resolution: "vega-expression@npm:5.0.1" + dependencies: + "@types/estree": ^1.0.0 + vega-util: ^1.17.1 + checksum: 396e950209a98a3fb1e28ba554f179c07aaeac7d11cfac9298a2af0b98456d69ec6573ecc7f21eff6f9f95bbfa8c59a1093d25e8ce586d0c0c589c230784db17 + languageName: node + linkType: hard + +"vega-force@npm:~4.1.1": + version: 4.1.1 + resolution: "vega-force@npm:4.1.1" + dependencies: + d3-force: ^3.0.0 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: 50bfdfd2e3e4f98ad0088cead041cbe2e62300f4a427ab26647a186239b752c86f4552a08134ec6137356a819605abcfd604b979ffee7307a9aae0a486b03556 + languageName: node + linkType: hard + +"vega-format@npm:^1.1.1, vega-format@npm:~1.1.1": + version: 1.1.1 + resolution: "vega-format@npm:1.1.1" + dependencies: + d3-array: ^3.2.2 + d3-format: ^3.1.0 + d3-time-format: ^4.1.0 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: d506acb8611a6340ff419ebf308a758a54aaf3cf141863553df83980dcf8dc7bf806bee257d11a52d43682d159d7be03ab8a92bdd4d018d8c9f39a70c45cb197 + languageName: node + linkType: hard + +"vega-functions@npm:^5.13.1, vega-functions@npm:~5.13.1": + version: 5.13.1 + resolution: "vega-functions@npm:5.13.1" + dependencies: + d3-array: ^3.2.2 + d3-color: ^3.1.0 + d3-geo: ^3.1.0 + vega-dataflow: ^5.7.5 + vega-expression: ^5.0.1 + vega-scale: ^7.3.0 + vega-scenegraph: ^4.10.2 + vega-selections: ^5.4.1 + vega-statistics: ^1.8.1 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: 05d154f29dec1742935bfe2852176e392e7c3a107ef76e2c0fe103c7f68812084218ee3c50ef13ba250fa6629d0f4e3a0997fac4b475a1f27be1e465e99b170b + languageName: node + linkType: hard + +"vega-geo@npm:~4.4.1": + version: 4.4.1 + resolution: "vega-geo@npm:4.4.1" + dependencies: + d3-array: ^3.2.2 + d3-color: ^3.1.0 + d3-geo: ^3.1.0 + vega-canvas: ^1.2.7 + vega-dataflow: ^5.7.5 + vega-projection: ^1.6.0 + vega-statistics: ^1.8.1 + vega-util: ^1.17.1 + checksum: e9c62d9134c2449a1a80cd5cb71ed6dc455d893a36fdcb1a696bcae3897670c32687cf14a0f366b0ec76905e5be406131dc671e5d607ffcbef74e94b8c697007 + languageName: node + linkType: hard + +"vega-hierarchy@npm:~4.1.1": + version: 4.1.1 + resolution: "vega-hierarchy@npm:4.1.1" + dependencies: + d3-hierarchy: ^3.1.2 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: beb23948922f1b52bf03b836d71d3a5a36db3a6bfe2af74b6a5fc45a2e2e877226313e2389772be62a459728467618175d8c02a07e88330844fdec45fd5f69ac + languageName: node + linkType: hard + +"vega-label@npm:~1.2.1": + version: 1.2.1 + resolution: "vega-label@npm:1.2.1" + dependencies: + vega-canvas: ^1.2.6 + vega-dataflow: ^5.7.3 + vega-scenegraph: ^4.9.2 + vega-util: ^1.15.2 + checksum: 2704c99328ead677441e746acd8f4529301437d08b2758933fc13353d2eab9af353e4ebcc4ff1f09f41d600401b097e2df3c9e8e56d4861e5216222dd9e29185 + languageName: node + linkType: hard + +"vega-lite@npm:^5.6.1": + version: 5.15.1 + resolution: "vega-lite@npm:5.15.1" + dependencies: + json-stringify-pretty-compact: ~3.0.0 + tslib: ~2.6.2 + vega-event-selector: ~3.0.1 + vega-expression: ~5.1.0 + vega-util: ~1.17.2 + yargs: ~17.7.2 + peerDependencies: + vega: ^5.24.0 + bin: + vl2pdf: bin/vl2pdf + vl2png: bin/vl2png + vl2svg: bin/vl2svg + vl2vg: bin/vl2vg + checksum: ad7ad74e8ba5e5573d6ef1d251065ac28ae0be97f829f5e66e1c4c1ca43b9902d9fd95a94818c69f71cac21c29f6240a308725a3867489629cc6782c355511c5 + languageName: node + linkType: hard + +"vega-loader@npm:^4.5.1, vega-loader@npm:~4.5.1": + version: 4.5.1 + resolution: "vega-loader@npm:4.5.1" + dependencies: + d3-dsv: ^3.0.1 + node-fetch: ^2.6.7 + topojson-client: ^3.1.0 + vega-format: ^1.1.1 + vega-util: ^1.17.1 + checksum: 95f6eebc75a97665cf34faaea431934047e1b2e9d7532f48f62dab4884d606a7d9da53962e1631a5790a7a867f720581852a3db9be1a7f667882062f6c102ee0 + languageName: node + linkType: hard + +"vega-parser@npm:~6.2.0": + version: 6.2.0 + resolution: "vega-parser@npm:6.2.0" + dependencies: + vega-dataflow: ^5.7.5 + vega-event-selector: ^3.0.1 + vega-functions: ^5.13.1 + vega-scale: ^7.3.0 + vega-util: ^1.17.1 + checksum: 19872153c16aab30c4df338e0df7bd331e0bf74c7c6afce5428df555b9bdb0c4acf76b54092cacd4726a1349912ea803c90e1b30d53f4a02044e0559873969a7 + languageName: node + linkType: hard + +"vega-projection@npm:^1.6.0, vega-projection@npm:~1.6.0": + version: 1.6.0 + resolution: "vega-projection@npm:1.6.0" + dependencies: + d3-geo: ^3.1.0 + d3-geo-projection: ^4.0.0 + vega-scale: ^7.3.0 + checksum: 9c52848e294ff68051fe9f44fa536656c4e6be3d474bd3359e21aa154ab282755eaee624ac31b1ca01816227900e1d81a6d191e36f46e47525ed6648397f0fa0 + languageName: node + linkType: hard + +"vega-regression@npm:~1.1.1": + version: 1.1.1 + resolution: "vega-regression@npm:1.1.1" + dependencies: + d3-array: ^3.2.2 + vega-dataflow: ^5.7.3 + vega-statistics: ^1.7.9 + vega-util: ^1.15.2 + checksum: 61686565ad0df517378207acb6b03baba9ee0fb3acef10d5b7cc996509ae322ad1a54a4eb20af9e15468fc3a8adb21d9008d29d1e450663c885c1626702f20f5 + languageName: node + linkType: hard + +"vega-runtime@npm:^6.1.4, vega-runtime@npm:~6.1.4": + version: 6.1.4 + resolution: "vega-runtime@npm:6.1.4" + dependencies: + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: a1da40ddb3109f1ced8e61d2e7b52784fbb29936ee4c47cb5630dbbeb12ef6e0c3cd3cd189c34377f82402bf19c61dd148d90330fec743b8667635ac48e4ba29 + languageName: node + linkType: hard + +"vega-scale@npm:^7.3.0, vega-scale@npm:~7.3.0": + version: 7.3.0 + resolution: "vega-scale@npm:7.3.0" + dependencies: + d3-array: ^3.2.2 + d3-interpolate: ^3.0.1 + d3-scale: ^4.0.2 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: 8e434f27a51a913dd18374ec0d2bc33758eda7db1ee6342721644f977e705268b8df6b3e89813774d776d03a0cd24f91d4d59f9e80951f67dfbbf8637f5a69ad + languageName: node + linkType: hard + +"vega-scenegraph@npm:^4.10.2, vega-scenegraph@npm:^4.9.2, vega-scenegraph@npm:~4.10.2": + version: 4.10.2 + resolution: "vega-scenegraph@npm:4.10.2" + dependencies: + d3-path: ^3.1.0 + d3-shape: ^3.2.0 + vega-canvas: ^1.2.7 + vega-loader: ^4.5.1 + vega-scale: ^7.3.0 + vega-util: ^1.17.1 + checksum: 6caf3e298297b918c8b6a72f019e51e2bfbaecd316e4d1c37d855ac9366d177cdbf16e9c8857c5ccde128bcd9645af7ee7dc81111bcd743d192e1a3b9a9d7185 + languageName: node + linkType: hard + +"vega-selections@npm:^5.4.1": + version: 5.4.1 + resolution: "vega-selections@npm:5.4.1" + dependencies: + d3-array: 3.2.2 + vega-expression: ^5.0.1 + vega-util: ^1.17.1 + checksum: c594d41ec3886af94976e4dc4e152bea9b3975a22d435aa38dac2aab105851cb83fd4aa0f1e81a47f8bc0bea1677af93816331e3ed084ab3ec2e51b3544c109f + languageName: node + linkType: hard + +"vega-statistics@npm:^1.7.9, vega-statistics@npm:^1.8.1, vega-statistics@npm:~1.8.1": + version: 1.8.1 + resolution: "vega-statistics@npm:1.8.1" + dependencies: + d3-array: ^3.2.2 + checksum: 031f7b617dc8d41f6834b2381ea48a11247630ec6934b0559e4874447072dbbaa5df1eedfd9b8a8959f7bab7d09d3bf828c06c1cd830e1dd9d9234c422b328b6 + languageName: node + linkType: hard + +"vega-time@npm:^2.1.1, vega-time@npm:~2.1.1": + version: 2.1.1 + resolution: "vega-time@npm:2.1.1" + dependencies: + d3-array: ^3.2.2 + d3-time: ^3.1.0 + vega-util: ^1.17.1 + checksum: 3d6a50f779be4b5e7f27bd2aae766035c29e59e03e62d2e96b94a2f759ed3104c1102c1006dd416e7b819ee501880ae7a722c2fa9aabf9efac86503c1aada14a + languageName: node + linkType: hard + +"vega-transforms@npm:~4.10.1": + version: 4.10.1 + resolution: "vega-transforms@npm:4.10.1" + dependencies: + d3-array: ^3.2.2 + vega-dataflow: ^5.7.5 + vega-statistics: ^1.8.1 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: fda63a71b53de180c30c43eabd63eab6bb8ab183890077d41d45688db92d1ad7d9951d987b9c5dff5a8cd61d163b75bdb2aa847e0d86aa788025d15ac38e38de + languageName: node + linkType: hard + +"vega-typings@npm:~0.23.0": + version: 0.23.0 + resolution: "vega-typings@npm:0.23.0" + dependencies: + "@types/geojson": ^7946.0.10 + vega-event-selector: ^3.0.1 + vega-expression: ^5.0.1 + vega-util: ^1.17.1 + checksum: 4f55ad548c5c767958a113d83ebf01ae073a10eef3b9abfeed2a24809fac4d8eb693a2c4d4684b39a0513ed9a52aec30fd80e9568b4e7aef2a85f18a554630c5 + languageName: node + linkType: hard + +"vega-util@npm:^1.15.2, vega-util@npm:^1.17.1, vega-util@npm:~1.17.1, vega-util@npm:~1.17.2": + version: 1.17.2 + resolution: "vega-util@npm:1.17.2" + checksum: 5d681cb1a6ffda7af1b74df7c1c46a32f1d874daef54f9c9c65c7d7c7bfc4271dc6d9b1c1c7a853b14eb6e4cc8ec811b0132cd3ea25fa85259eac92e1b4f07fa + languageName: node + linkType: hard + +"vega-view-transforms@npm:~4.5.9": + version: 4.5.9 + resolution: "vega-view-transforms@npm:4.5.9" + dependencies: + vega-dataflow: ^5.7.5 + vega-scenegraph: ^4.10.2 + vega-util: ^1.17.1 + checksum: aeeaf3c2f1a02b1303c16a586dbcb20f208c101d06d7e988e18ab71fb67d87be5d8ff228ebf25971535d6e41dc816168cfa68b8676e7250df07a40aefdea32a7 + languageName: node + linkType: hard + +"vega-view@npm:~5.11.1": + version: 5.11.1 + resolution: "vega-view@npm:5.11.1" + dependencies: + d3-array: ^3.2.2 + d3-timer: ^3.0.1 + vega-dataflow: ^5.7.5 + vega-format: ^1.1.1 + vega-functions: ^5.13.1 + vega-runtime: ^6.1.4 + vega-scenegraph: ^4.10.2 + vega-util: ^1.17.1 + checksum: 82ddc74593b3a359d0b3458bc06573673ff9bf13f84020cb36fb4676c5d7f547e9650eb6faaa76799fbcedd27bcd266603dbd08c420e2d2229cc6b9f48a4a66d + languageName: node + linkType: hard + +"vega-voronoi@npm:~4.2.1": + version: 4.2.1 + resolution: "vega-voronoi@npm:4.2.1" + dependencies: + d3-delaunay: ^6.0.2 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: f618174ad5f451c507a80e373288bb2c0da7a8a908d62f885bc77b354c4334504ae2d1042742f68ad419ade7b548aeca9ca1042ae5541bebd7f5297afc23bb35 + languageName: node + linkType: hard + +"vega-wordcloud@npm:~4.1.4": + version: 4.1.4 + resolution: "vega-wordcloud@npm:4.1.4" + dependencies: + vega-canvas: ^1.2.7 + vega-dataflow: ^5.7.5 + vega-scale: ^7.3.0 + vega-statistics: ^1.8.1 + vega-util: ^1.17.1 + checksum: 34d1882651d3a2f34ce40a6eaeed700de126f627cdf041ec2bcc7ada46d7b4b68a38a2974236eec87ee876d9abd095af7ab17e7698b0e2fbc831460767969d7a + languageName: node + linkType: hard + +"vega@npm:^5.20.0": + version: 5.23.0 + resolution: "vega@npm:5.23.0" + dependencies: + vega-crossfilter: ~4.1.1 + vega-dataflow: ~5.7.5 + vega-encode: ~4.9.1 + vega-event-selector: ~3.0.1 + vega-expression: ~5.0.1 + vega-force: ~4.1.1 + vega-format: ~1.1.1 + vega-functions: ~5.13.1 + vega-geo: ~4.4.1 + vega-hierarchy: ~4.1.1 + vega-label: ~1.2.1 + vega-loader: ~4.5.1 + vega-parser: ~6.2.0 + vega-projection: ~1.6.0 + vega-regression: ~1.1.1 + vega-runtime: ~6.1.4 + vega-scale: ~7.3.0 + vega-scenegraph: ~4.10.2 + vega-statistics: ~1.8.1 + vega-time: ~2.1.1 + vega-transforms: ~4.10.1 + vega-typings: ~0.23.0 + vega-util: ~1.17.1 + vega-view: ~5.11.1 + vega-view-transforms: ~4.5.9 + vega-voronoi: ~4.2.1 + vega-wordcloud: ~4.1.4 + checksum: 6ee2961f44a68cb57e0e349373e4f069b02df2b6128472fb83eb3baaaa0ffb8a0b06a84f40585ffbb2c5f93cfd3745eed7a907759529a05d457e70dcaa45341a + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:8.2.0, vscode-jsonrpc@npm:^8.0.2": + version: 8.2.0 + resolution: "vscode-jsonrpc@npm:8.2.0" + checksum: f302a01e59272adc1ae6494581fa31c15499f9278df76366e3b97b2236c7c53ebfc71efbace9041cfd2caa7f91675b9e56f2407871a1b3c7f760a2e2ee61484a + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:^6.0.0": + version: 6.0.0 + resolution: "vscode-jsonrpc@npm:6.0.0" + checksum: 3a67a56f287e8c449f2d9752eedf91e704dc7b9a326f47fb56ac07667631deb45ca52192e9bccb2ab108764e48409d70fa64b930d46fc3822f75270b111c5f53 + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:^3.17.0": + version: 3.17.5 + resolution: "vscode-languageserver-protocol@npm:3.17.5" + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + checksum: dfb42d276df5dfea728267885b99872ecff62f6c20448b8539fae71bb196b420f5351c5aca7c1047bf8fb1f89fa94a961dce2bc5bf7e726198f4be0bb86a1e71 + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.17.5": + version: 3.17.5 + resolution: "vscode-languageserver-types@npm:3.17.5" + checksum: 79b420e7576398d396579ca3a461c9ed70e78db4403cd28bbdf4d3ed2b66a2b4114031172e51fad49f0baa60a2180132d7cb2ea35aa3157d7af3c325528210ac + languageName: node + linkType: hard + +"vscode-ws-jsonrpc@npm:~1.0.2": + version: 1.0.2 + resolution: "vscode-ws-jsonrpc@npm:1.0.2" + dependencies: + vscode-jsonrpc: ^8.0.2 + checksum: eb2fdb5c96f124326505f06564dfc6584318b748fd6e39b4c0ba16a0d383d13ba0e9433596abdb841428dfc2a5501994c3206723d1cb38c6af5fcac1faf4be26 + languageName: node + linkType: hard + +"w3c-keyname@npm:^2.2.4": + version: 2.2.8 + resolution: "w3c-keyname@npm:2.2.8" + checksum: 95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"ws@npm:^8.11.0": + version: 8.14.2 + resolution: "ws@npm:8.14.2" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 3ca0dad26e8cc6515ff392b622a1467430814c463b3368b0258e33696b1d4bed7510bc7030f7b72838b9fdeb8dbd8839cbf808367d6aae2e1d668ce741d4308b + languageName: node + linkType: hard + +"y-protocols@npm:^1.0.5": + version: 1.0.5 + resolution: "y-protocols@npm:1.0.5" + dependencies: + lib0: ^0.2.42 + checksum: d19404a4ebafcf3761c28b881abe8c32ab6e457db0e5ffc7dbb749cbc2c3bb98e003a43f3e8eba7f245b2698c76f2c4cdd1c2db869f8ec0c6ef94736d9a88652 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs@npm:~17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + 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 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + +"yjs@npm:^13.5.40": + version: 13.5.51 + resolution: "yjs@npm:13.5.51" + dependencies: + lib0: ^0.2.72 + checksum: 4dea7a4c71163fd64f24cc153c25af641cefed7c7aadbc7e0973e2f35398635a58b5da4a45f8e10e0fc4331cde517869ac626e6b449d66766fc61d12e81b06f7 + languageName: node + linkType: hard diff --git a/yarn.lock b/yarn.lock index 5293a1b99..4499c964d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,11144 +1,12536 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" - integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== - dependencies: - "@babel/highlight" "^7.22.10" - chalk "^2.4.2" - -"@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== - -"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" - integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-compilation-targets" "^7.22.10" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.10" - "@babel/parser" "^7.22.10" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.1" - -"@babel/generator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" - integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== - dependencies: - "@babel/types" "^7.22.10" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" - integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" - integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" - integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - semver "^6.3.0" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" - integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.0" - -"@babel/helper-define-polyfill-provider@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" - integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== - dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" - integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" - integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-replace-supers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" - integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.5", "@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== - -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== - -"@babel/helper-wrap-function@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" - integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helpers@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a" - integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw== - dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" - -"@babel/highlight@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" - integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" - integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== - -"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" - integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" - integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@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.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^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.10.4", "@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.10.4", "@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-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3" - integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" - integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" - integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" - integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" - -"@babel/plugin-transform-destructuring@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" - integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" - integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" - integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" - integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" - integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" - integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" - integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" - integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" - integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" - integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" - integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== - dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.5" - -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - -"@babel/plugin-transform-optional-catch-binding@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" - integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0" - integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" - integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" - integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa" - integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.1" - -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" - integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" - integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== - dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@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-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.5" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.5" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.5" - "@babel/plugin-transform-classes" "^7.22.5" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.5" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.5" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.5" - "@babel/plugin-transform-for-of" "^7.22.5" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.5" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-modules-systemjs" "^7.22.5" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" - "@babel/plugin-transform-numeric-separator" "^7.22.5" - "@babel/plugin-transform-object-rest-spread" "^7.22.5" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" - "@babel/plugin-transform-parameters" "^7.22.5" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.5" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.5" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.5" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.3" - babel-plugin-polyfill-corejs3 "^0.8.1" - babel-plugin-polyfill-regenerator "^0.5.0" - core-js-compat "^3.30.2" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.18.9", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" - integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/template@^7.22.5", "@babel/template@^7.3.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.22.10", "@babel/traverse@^7.22.5": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" - integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" - -"@babel/types@^7.22.15", "@babel/types@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@blueprintjs/colors@^4.0.0-alpha.3": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@blueprintjs/colors/-/colors-4.2.1.tgz#603b2512caee84feddcb3dbd536534c140b9a1f3" - integrity sha512-Cx7J2YnUuxn+fi+y5XtXnBB7+cFHN4xBrRkaAetp78i3VTCXjUk+d1omrOr8TqbRucUXTdrhbZOUHpzRLFcJpQ== - dependencies: - tslib "~2.5.0" - -"@blueprintjs/core@^3.36.0", "@blueprintjs/core@^3.54.0": - version "3.54.0" - resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-3.54.0.tgz#7269f34eccdf0d2874377c5ad973ca2a31562221" - integrity sha512-u2c1s6MNn0ocxhnC6CuiG5g3KV6b4cKUvSobznepA9SC3/AL1s3XOvT7DLWoHRv2B/vBOHFYEDzLw2/vlcGGZg== - dependencies: - "@blueprintjs/colors" "^4.0.0-alpha.3" - "@blueprintjs/icons" "^3.33.0" - "@juggle/resize-observer" "^3.3.1" - "@types/dom4" "^2.0.1" - classnames "^2.2" - dom4 "^2.1.5" - normalize.css "^8.0.1" - popper.js "^1.16.1" - react-lifecycles-compat "^3.0.4" - react-popper "^1.3.7" - react-transition-group "^2.9.0" - tslib "~2.3.1" - -"@blueprintjs/icons@^3.33.0": - version "3.33.0" - resolved "https://registry.yarnpkg.com/@blueprintjs/icons/-/icons-3.33.0.tgz#4dacdb7731abdf08d1ab240f3a23a185df60918b" - integrity sha512-Q6qoSDIm0kRYQZISm59UUcDCpV3oeHulkLuh3bSlw0HhcSjvEQh2PSYbtaifM60Q4aK4PCd6bwJHg7lvF1x5fQ== - dependencies: - classnames "^2.2" - tslib "~2.3.1" - -"@blueprintjs/select@^3.15.0": - version "3.19.1" - resolved "https://registry.yarnpkg.com/@blueprintjs/select/-/select-3.19.1.tgz#b5e8baa6f182a0647651a57fde8d1d97eaa1e997" - integrity sha512-8UJIZMaWXRMQHr14wbmzJc/CklcSKxOU5JUux0xXKQz/hDW/g1a650tlwJmnxufvRdShbGinlVfHupCs0EL6sw== - dependencies: - "@blueprintjs/core" "^3.54.0" - classnames "^2.2" - tslib "~2.3.1" - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@csstools/css-parser-algorithms@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.0.tgz#0cc3a656dc2d638370ecf6f98358973bfbd00141" - integrity sha512-dTKSIHHWc0zPvcS5cqGP+/TPFUJB0ekJ9dGKvMAFoNuBFhDPBt9OMGNZiIA5vTiNdGHHBeScYPXIGBMnVOahsA== - -"@csstools/css-tokenizer@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e" - integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA== - -"@csstools/media-query-list-parser@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.2.tgz#6ef642b728d30c1009bfbba3211c7e4c11302728" - integrity sha512-M8cFGGwl866o6++vIY7j1AKuq9v57cf+dGepScwCcbut9ypJNr4Cj+LLTWligYUZ0uyhEoJDKt5lvyBfh2L3ZQ== - -"@csstools/selector-specificity@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247" - integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g== - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@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== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== - -"@eslint/eslintrc@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" - integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.44.0": - version "8.44.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" - integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== - -"@fortawesome/fontawesome-free@^5.12.0": - version "5.15.4" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" - integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== - -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@hypnosphi/create-react-context@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" - integrity sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A== - dependencies: - gud "^1.0.0" - warning "^4.0.3" - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@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.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== - dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== - dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" - "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" - -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - 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" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@juggle/resize-observer@^3.3.1": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" - integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== - -"@jupyter/ydoc@~0.2.4": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@jupyter/ydoc/-/ydoc-0.2.5.tgz#8241bce5798a3c10761df7e7045c0b4e24abf868" - integrity sha512-XsAAkq55k6UCIv2kAFKbWahiuCsSxLQaRuWfULUuAhKVnA/QD2gqVMYx2yvnB0+AR7PKpKdf65uUxGxnSTBKqA== - dependencies: - "@jupyterlab/nbformat" "^3.0.0 || ^4.0.0-alpha.15" - "@lumino/coreutils" "^1.11.0 || ^2.0.0-alpha.6" - "@lumino/disposable" "^1.10.0 || ^2.0.0-alpha.6" - "@lumino/signaling" "^1.10.0 || ^2.0.0-alpha.6" - y-protocols "^1.0.5" - yjs "^13.5.40" - -"@jupyterlab/application@^3.0.0", "@jupyterlab/application@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-3.6.5.tgz#44679f48ad6485e96e6ce5cd6401cafa8c1d911c" - integrity sha512-T9pjZbIB26HBkssG1bLVZqwUXjSMCobYGRwNvit0GiJ4BF1I2GxuVF4Hd2tNIqqFreRVEyvobN+w+DGZWFLxfw== - dependencies: - "@fortawesome/fontawesome-free" "^5.12.0" - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/docregistry" "^3.6.5" - "@jupyterlab/rendermime" "^3.6.5" - "@jupyterlab/rendermime-interfaces" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/statedb" "^3.6.5" - "@jupyterlab/translation" "^3.6.5" - "@jupyterlab/ui-components" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/application" "^1.31.4" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - -"@jupyterlab/apputils@^2 || ^3", "@jupyterlab/apputils@^3.0.0", "@jupyterlab/apputils@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-3.6.5.tgz#cc4fbc811c797dee71d1ecff0fde15b4ca6750e6" - integrity sha512-cJ4FnsnEMwhcrh/27Z7q04hYRPYWgFRrBylw10SBHWzOryiFc9chg8LqzUOL0CNjmBRui6hS6w5R/Z7YmINpTg== - dependencies: - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/settingregistry" "^3.6.5" - "@jupyterlab/statedb" "^3.6.5" - "@jupyterlab/translation" "^3.6.5" - "@jupyterlab/ui-components" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/domutils" "^1.8.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - "@types/react" "^17.0.0" - react "^17.0.1" - react-dom "^17.0.1" - sanitize-html "~2.7.3" - url "^0.11.0" - -"@jupyterlab/attachments@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/attachments/-/attachments-3.6.5.tgz#ad8600dfe26b7036b6e1b2f1ad066fe10e36d2ef" - integrity sha512-Gtam8zzgL3/hkBiHHBAS3nW2EsrBiA+X9SeM+A0CmKq0JHDFlf8boR54HqU3zGZv6Cc313RfVuHtoBsX2hQIcQ== - dependencies: - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/rendermime" "^3.6.5" - "@jupyterlab/rendermime-interfaces" "^3.6.5" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - -"@jupyterlab/builder@^3.0.0": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/builder/-/builder-3.6.5.tgz#17e103ff13a135e3df8cf03bf7c592fae87b97ec" - integrity sha512-J9WO50gxjJ1bUo7BCix0fSxpRySCwaR8AaWNQ5QdYT1ARSGuSnfM9ZyeUOS61DvL3+h7IqsPTQQr5tbhIWv91Q== - dependencies: - "@lumino/algorithm" "^1.9.0" - "@lumino/application" "^1.31.4" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - ajv "^6.12.3" - commander "~6.0.0" - css-loader "^5.0.1" - duplicate-package-checker-webpack-plugin "^3.0.0" - file-loader "~6.0.0" - fs-extra "^9.0.1" - glob "~7.1.6" - license-webpack-plugin "^2.3.14" - mini-css-extract-plugin "~1.3.2" - path-browserify "^1.0.0" - process "^0.11.10" - raw-loader "~4.0.0" - source-map-loader "~1.0.2" - style-loader "~2.0.0" - supports-color "^7.2.0" - svg-url-loader "~6.0.0" - terser-webpack-plugin "^4.1.0" - to-string-loader "^1.1.6" - url-loader "~4.1.0" - webpack "^5.41.1" - webpack-cli "^4.1.0" - webpack-merge "^5.1.2" - worker-loader "^3.0.2" - -"@jupyterlab/cells@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/cells/-/cells-3.6.5.tgz#44b87fd4e8cf645be45f862eb006d28cc780a448" - integrity sha512-oxo2jjKwrLlWkH8kNk64LdOoUowd+iBQuY9/5fyk5U2YswV4x1GUtOlBAzFYiBFK4Nq+NvwjXoZjVaYAxTs6pA== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/attachments" "^3.6.5" - "@jupyterlab/codeeditor" "^3.6.5" - "@jupyterlab/codemirror" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/filebrowser" "^3.6.5" - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/outputarea" "^3.6.5" - "@jupyterlab/rendermime" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/shared-models" "^3.6.5" - "@jupyterlab/ui-components" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - marked "^4.0.17" - react "^17.0.1" - -"@jupyterlab/codeeditor@^2 || ^3", "@jupyterlab/codeeditor@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-3.6.5.tgz#1101ada956f6e983c6bd9101db3674bf53165975" - integrity sha512-Wp81WZaUg3cJh/cKhoB/RemDOxE6hyEx0kvNu8BRTTYobKMqMQWahKTEWRoHxTCoeQzb/tJUSEJQV8u7d0vr1Q== - dependencies: - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/shared-models" "^3.6.5" - "@jupyterlab/translation" "^3.6.5" - "@jupyterlab/ui-components" "^3.6.5" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - -"@jupyterlab/codemirror@^2 || ^3", "@jupyterlab/codemirror@^3.0.0", "@jupyterlab/codemirror@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-3.6.5.tgz#36189e2764979a7e93b9a10ee8232e21ca86d2bd" - integrity sha512-BonbNpBxOn4CDPuyl2JtkruwgiA8ANsIAuzrZMoTnglOScHLGxmddnF5BhsjuvatG2cDM/PZtY+KaQqcaJQBQQ== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/codeeditor" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/shared-models" "^3.6.5" - "@jupyterlab/statusbar" "^3.6.5" - "@jupyterlab/translation" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - codemirror "~5.61.0" - react "^17.0.1" - y-codemirror "^3.0.1" - -"@jupyterlab/console@^3.0.0": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/console/-/console-3.6.5.tgz#a61b255801221e10b79bf8a4b522855acf5ee172" - integrity sha512-r6mKcCU8xuuCmJAGM0TOVwuLNEEmhpzD3JbM8rEeBMr96G65rTYq/wy7WiNsYApphmvbc/NGVlCAROM5rSTbsg== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/cells" "^3.6.5" - "@jupyterlab/codeeditor" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/rendermime" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/translation" "^3.6.5" - "@jupyterlab/ui-components" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - -"@jupyterlab/coreutils@^4 || ^5", "@jupyterlab/coreutils@^5.0.0", "@jupyterlab/coreutils@^5.6.5": - version "5.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-5.6.5.tgz#113b95fe106fc2be69c7a523f916ac25d2d413c2" - integrity sha512-nQ0eY9rv8bj0KoFHAwR4dDJY033XZsSDH5EV/E5m5/0f/oyLxWmKI3L/C1alXrltgdivh3nudbDX7VzQRoZPHA== - dependencies: - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - minimist "~1.2.0" - moment "^2.24.0" - path-browserify "^1.0.0" - url-parse "~1.5.1" - -"@jupyterlab/docmanager@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/docmanager/-/docmanager-3.6.5.tgz#a0ce3bfc73748fc128b99588ebea64c4643f1f1c" - integrity sha512-BBu03OJrtst+2zAxq4NJpaizIfDCZRL7G736o2bn5LSTNuUmg3gVbAtUG7beqUX/oKrCO/ALlgPI8zL+5vS9lQ== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/docprovider" "^3.6.5" - "@jupyterlab/docregistry" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/statusbar" "^3.6.5" - "@jupyterlab/translation" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - react "^17.0.1" - -"@jupyterlab/docprovider@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/docprovider/-/docprovider-3.6.5.tgz#4e296d4f117a545fd7b33dd3dca52f0f39c312b3" - integrity sha512-jPFI2hKt1D/9ZpDH7iB9XDoKj8HYSNAFFENWOlRaEXCHL3S3lZA9b2G+T1XunQRefYxdyDZlY2JUSXojdgV2mA== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/shared-models" "^3.6.5" - "@jupyterlab/translation" "^3.6.5" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - y-protocols "^1.0.5" - y-websocket "^1.4.6" - -"@jupyterlab/docregistry@^3.0.0", "@jupyterlab/docregistry@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-3.6.5.tgz#8744c794c711454224d036e78cdb750e67b58ddf" - integrity sha512-/QYkpDyqmDFeB12fjr0ANbSuJ2CRGk3O4yVft58pUsQHcWTZLXMG23XMMt9SaFjlr5LcYjhAbIfPzR8NYwGU9Q== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/codeeditor" "^3.6.5" - "@jupyterlab/codemirror" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/docprovider" "^3.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/rendermime" "^3.6.5" - "@jupyterlab/rendermime-interfaces" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/shared-models" "^3.6.5" - "@jupyterlab/translation" "^3.6.5" - "@jupyterlab/ui-components" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - -"@jupyterlab/filebrowser@^3.0.0", "@jupyterlab/filebrowser@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/filebrowser/-/filebrowser-3.6.5.tgz#2a87f7cfe74f653b6caeece72a22490c6ca2dfcc" - integrity sha512-jDNy3UHKNbEEW1tuUnWaae9dgK3PvyyJRnYWou7Tiz1uk/aqyoYEcvfyEP0xJ87bh8mw4D8XHaEgfEOufZwyMg== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/docmanager" "^3.6.5" - "@jupyterlab/docregistry" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/statedb" "^3.6.5" - "@jupyterlab/statusbar" "^3.6.5" - "@jupyterlab/translation" "^3.6.5" - "@jupyterlab/ui-components" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - react "^17.0.1" - -"@jupyterlab/galata@^4.5.2": - version "4.5.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/galata/-/galata-4.5.5.tgz#f80a49641953a953c835fbe6d36318b89242a5e4" - integrity sha512-SqRUfYnI9ldnpa/jyeorFU4kl6LVkpHqVAr+JTRTqnjEDiyLzk/QWGZIgh9e5rIdtT0zHIyyWJo1mcCx/NZmVA== - dependencies: - "@jupyterlab/application" "^3.6.5" - "@jupyterlab/cells" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/docmanager" "^3.6.5" - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/notebook" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/settingregistry" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@playwright/test" "^1.16.2" - "@stdlib/stats" "^0.0.13" - fs-extra "^9.0.1" - http-server "^13.0.0" - json5 "^2.1.1" - node-fetch "^2.6.0" - path "~0.12.7" - systeminformation "^5.8.6" - vega "^5.20.0" - vega-lite "^5.1.0" - vega-statistics "^1.7.9" - -"@jupyterlab/mainmenu@^3.0.0": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/mainmenu/-/mainmenu-3.6.5.tgz#a101260d8c60347ef61f6c7b59e94f7260bbd1a5" - integrity sha512-E7vJqh50tGmuZMRBb0XTqky3eINGFLO2ak2oj8xekLZX1hstLp6LHzlJy5ygSABD6AmxcyrXSbwvITHReH8PXQ== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/translation" "^3.6.5" - "@jupyterlab/ui-components" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/widgets" "^1.37.2" - -"@jupyterlab/nbformat@^2 || ^3", "@jupyterlab/nbformat@^3.0.0", "@jupyterlab/nbformat@^3.0.0 || ^4.0.0-alpha.15", "@jupyterlab/nbformat@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/nbformat/-/nbformat-3.6.5.tgz#dfb957d1297b2f319690df326e2ecc1eee99edfa" - integrity sha512-yyyNniuzxycsF+kHvjpAIjZ+qrt3G/HEViZN+FJA3vFpg6e2n/nqa7BgzlxINS5SH4FnBG6rM/u45bwih38VkA== - dependencies: - "@lumino/coreutils" "^1.11.0" - -"@jupyterlab/notebook@^2 || ^3", "@jupyterlab/notebook@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/notebook/-/notebook-3.6.5.tgz#6d3c4fecb4c95dfacf4ea68335518aaca73f7fa3" - integrity sha512-+Tb/kvFeI5hCzt60wdfxFncquhrkX2C3eoOPAfiabqWkCL52oZfYDRYVmrXTJzvuhmVVupRPKjvusFPDoBN8/g== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/cells" "^3.6.5" - "@jupyterlab/codeeditor" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/docregistry" "^3.6.5" - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/rendermime" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/settingregistry" "^3.6.5" - "@jupyterlab/shared-models" "^3.6.5" - "@jupyterlab/statusbar" "^3.6.5" - "@jupyterlab/translation" "^3.6.5" - "@jupyterlab/ui-components" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - react "^17.0.1" - -"@jupyterlab/observables@^4.6.5": - version "4.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-4.6.5.tgz#dea28b8048769adaad1376cb3bcb34a35a10c8df" - integrity sha512-k6x7kLou+1EPtVlrQ6OFoujFj1jlvsKMcnap83Omjqj1DIkzSBGat3Y7Yf5OS7lrdyERJGYbtV9vfeSkwdjkjA== - dependencies: - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - -"@jupyterlab/outputarea@^2 || ^3", "@jupyterlab/outputarea@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/outputarea/-/outputarea-3.6.5.tgz#9833ec040f90aa96a7b045e2c1e05197890920ae" - integrity sha512-CmsemQDwpO4RbxbmWgcwP7Pgq/3cJV6zpJSv4c172C3Nq82xXYPa+3XDbTV+cVFmZe+f1e3FJFw+i3uyT/Ad1Q== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/rendermime" "^3.6.5" - "@jupyterlab/rendermime-interfaces" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - resize-observer-polyfill "^1.5.1" - -"@jupyterlab/rendermime-interfaces@^3.6.5": - version "3.8.4" - resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.8.4.tgz#a1950e0c187a6807f03a0d95dca22b5a9c5a7974" - integrity sha512-zDbazcdkWSyO86VgicdWJwl3ho5XKKy12r8vvWNLggTfUFqIh1Ju/VFblNUIqKxGrkN7se/grEl6Sy2iGVZrug== - dependencies: - "@lumino/coreutils" "^1.11.0 || ^2.1.1" - "@lumino/widgets" "^1.37.2 || ^2.1.1" - -"@jupyterlab/rendermime@^2 || ^3", "@jupyterlab/rendermime@^3.0.0", "@jupyterlab/rendermime@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-3.6.5.tgz#95e49172914118ea5ca2d5037659ee2baf1c132a" - integrity sha512-ln0UgKJo+2qS4FehCQUR5W/SDbnwiUHX+zdKEViNI6NHK2oAeXtD4BbuxfS3ZfJyEKZcB6hMj+OVqO7opL/fvw== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/codemirror" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/rendermime-interfaces" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/translation" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - lodash.escape "^4.0.1" - marked "^4.0.17" - -"@jupyterlab/services@^5 || ^6", "@jupyterlab/services@^6.0.0", "@jupyterlab/services@^6.6.5": - version "6.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-6.6.5.tgz#81ca9d1f13789541055ebee870e9a67c929f7933" - integrity sha512-ReTi7r8nAzop1u65Jc4HDlyERcyV8ebjTGmXUohRWEqMbgjrFH8rz4rV8iQnobg5GZ2Kyf2RBdSTKwEttj2Ghg== - dependencies: - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/observables" "^4.6.5" - "@jupyterlab/settingregistry" "^3.6.5" - "@jupyterlab/statedb" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - node-fetch "^2.6.0" - ws "^7.4.6" - -"@jupyterlab/settingregistry@^2 || ^3", "@jupyterlab/settingregistry@^3.0.0", "@jupyterlab/settingregistry@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/settingregistry/-/settingregistry-3.6.5.tgz#9bf56db9bc85ffd06d2ed39ddfa5888c81e34f5f" - integrity sha512-PLg6E7j9x5otTnsTntFHwhbd+SacSsjiTP5krVq1WwTV6FrqrfT29ttxTCgV5+y7j91YmnEaHhZD+TXx5bQqIQ== - dependencies: - "@jupyterlab/statedb" "^3.6.5" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - ajv "^6.12.3" - json5 "^2.1.1" - -"@jupyterlab/shared-models@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/shared-models/-/shared-models-3.6.5.tgz#f7ccc174222b53ab19005425b20f241e231b28c4" - integrity sha512-5ZsX5Kt9n3tVvTSNDnV8vKKpQFDZ/zdUifwClx1gy5ZLMc0rtjXyIC10UKk0l8fIFSFGj7EN2ZR6pIAF0TRDZg== - dependencies: - "@jupyter/ydoc" "~0.2.4" - "@jupyterlab/nbformat" "^3.6.5" - -"@jupyterlab/statedb@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/statedb/-/statedb-3.6.5.tgz#4a651e4c97f7f89b852bb9e96409b07d55ad436f" - integrity sha512-Ah6pwJiU0XDI41iH+Ihw1lONBNDUrM4h58HwXD5qMvEPIWw5IxQn7QKt5XuaQWpTagXfUeuHrNpbekgdEImMog== - dependencies: - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - -"@jupyterlab/statusbar@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/statusbar/-/statusbar-3.6.5.tgz#dfb52b563c46fac0617db54fcfc5c2e8eaffb2c2" - integrity sha512-+kSW6ZgpXOfbfH9727JBYtx+lmgPiJCfFDKqlZfTbxYfvFx9j0C7eWfHZm6sL1WFYv5lB0iCUEY3GfL7X4LjHQ== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/codeeditor" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/translation" "^3.6.5" - "@jupyterlab/ui-components" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.2" - csstype "~3.0.3" - react "^17.0.1" - typestyle "^2.0.4" - -"@jupyterlab/terminal@^3.0.0": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/terminal/-/terminal-3.6.5.tgz#37d6952e617b7a8326ae3352d2d597fb3d766110" - integrity sha512-8oaw0axYXg3yZ4KC/uhKm1L3w+miqcjlj8dg2RH9Ao44VoQJzX98ZuA+g0jINoRAb2DYYww8jl7dg3gtecIwGA== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/translation" "^3.6.5" - "@lumino/coreutils" "^1.11.0" - "@lumino/domutils" "^1.8.0" - "@lumino/messaging" "^1.10.0" - "@lumino/widgets" "^1.37.2" - xterm "~4.19.0" - xterm-addon-fit "~0.5.0" - xterm-addon-web-links "~0.6.0" - -"@jupyterlab/testutils@3.0.0 - 3.0.7 || ^3.0.12": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/testutils/-/testutils-3.6.5.tgz#59faff87f4b1d9f5882f750397f25b54b7c3080d" - integrity sha512-sCzerNJO6Z5AdmZXanCERWdsX2LNY8cpSPNu72mZnyzzbnDTHEPJQoDwEwQVllWhtJ94NFqvL4z/Q0dfHjtroQ== - dependencies: - "@jupyterlab/apputils" "^3.6.5" - "@jupyterlab/cells" "^3.6.5" - "@jupyterlab/codeeditor" "^3.6.5" - "@jupyterlab/codemirror" "^3.6.5" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/docregistry" "^3.6.5" - "@jupyterlab/nbformat" "^3.6.5" - "@jupyterlab/notebook" "^3.6.5" - "@jupyterlab/rendermime" "^3.6.5" - "@jupyterlab/services" "^6.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - child_process "~1.0.2" - deepmerge "^4.2.2" - fs-extra "^9.0.1" - identity-obj-proxy "^3.0.0" - jest "^26.4.2" - jest-junit "^11.1.0" - jest-raw-loader "^1.0.1" - jest-summary-reporter "^0.0.2" - json-to-html "~0.1.2" - markdown-loader-jest "^0.1.1" - node-fetch "^2.6.0" - simulate-event "~1.4.0" - ts-jest "^26.3.0" - -"@jupyterlab/translation@^3.0.0", "@jupyterlab/translation@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/translation/-/translation-3.6.5.tgz#3f308e421cb8e5d8d3739269e20c01103c1871e4" - integrity sha512-avk96gOFuWqZWywCezeXvvjNnib4xQv5VY4rvvhTrz0unAeo8CtQ3L3ZBdLtWLq+aA470WfdhneLwtv3n6JYdw== - dependencies: - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/services" "^6.6.5" - "@jupyterlab/statedb" "^3.6.5" - "@lumino/coreutils" "^1.11.0" - -"@jupyterlab/ui-components@^3.0.0", "@jupyterlab/ui-components@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@jupyterlab/ui-components/-/ui-components-3.6.5.tgz#0092b5d6f606d53541450f089835fd58133bc138" - integrity sha512-yEkC/MLxalEJ9PvZs7AQo/IJDxqAToBBWvqC57t8lGEEkwNBG4hNDv8bmQMtfVv9BMvooQzhac5wJiaEj0T6sg== - dependencies: - "@blueprintjs/core" "^3.36.0" - "@blueprintjs/select" "^3.15.0" - "@jupyterlab/coreutils" "^5.6.5" - "@jupyterlab/translation" "^3.6.5" - "@lumino/algorithm" "^1.9.0" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.2" - "@rjsf/core" "^3.1.0" - react "^17.0.1" - react-dom "^17.0.1" - typestyle "^2.0.4" - -"@lumino/algorithm@^1.1.2", "@lumino/algorithm@^1.9.0", "@lumino/algorithm@^1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@lumino/algorithm/-/algorithm-1.9.2.tgz#b95e6419aed58ff6b863a51bfb4add0f795141d3" - integrity sha512-Z06lp/yuhz8CtIir3PNTGnuk7909eXt4ukJsCzChsGuot2l5Fbs96RJ/FOHgwCedaX74CtxPjXHXoszFbUA+4A== - -"@lumino/application@^1.31.4": - version "1.31.4" - resolved "https://registry.yarnpkg.com/@lumino/application/-/application-1.31.4.tgz#b804fcc46fb77deb41aee94c48bea990f735d6b9" - integrity sha512-dOSsDJ1tXOxC3fnSHvtDQK5RcICLEVPtO19HeCGwurb5W2ZZ55SZT2b5jZu6V/v8lGdtkNbr1RJltRpJRSRb/A== - dependencies: - "@lumino/commands" "^1.21.1" - "@lumino/coreutils" "^1.12.1" - "@lumino/widgets" "^1.37.2" - -"@lumino/collections@^1.2.3", "@lumino/collections@^1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@lumino/collections/-/collections-1.9.3.tgz#370dc2d50aa91371288a4f7376bea5a3191fc5dc" - integrity sha512-2i2Wf1xnfTgEgdyKEpqM16bcYRIhUOGCDzaVCEZACVG9R1CgYwOe3zfn71slBQOVSjjRgwYrgLXu4MBpt6YK+g== - dependencies: - "@lumino/algorithm" "^1.9.2" - -"@lumino/commands@^1.12.0", "@lumino/commands@^1.19.0", "@lumino/commands@^1.21.1": - version "1.21.1" - resolved "https://registry.yarnpkg.com/@lumino/commands/-/commands-1.21.1.tgz#eda8b3cf5ef73b9c8ce93b3b5cf66bb053df2a76" - integrity sha512-d1zJmwz5bHU0BM/Rl3tRdZ7/WgXnFB0bM7x7Bf0XDlmX++jnU9k0j3mh6/5JqCGLmIApKCRwVqSaV7jPmSJlcQ== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - "@lumino/domutils" "^1.8.2" - "@lumino/keyboard" "^1.8.2" - "@lumino/signaling" "^1.11.1" - "@lumino/virtualdom" "^1.14.3" - -"@lumino/coreutils@^1.11.0", "@lumino/coreutils@^1.11.0 || ^2.0.0-alpha.6", "@lumino/coreutils@^1.11.0 || ^2.1.1", "@lumino/coreutils@^1.12.1", "@lumino/coreutils@^1.3.0", "@lumino/coreutils@^1.5.3": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@lumino/coreutils/-/coreutils-1.12.1.tgz#79860c9937483ddf6cda87f6c2b9da8eb1a5d768" - integrity sha512-JLu3nTHzJk9N8ohZ85u75YxemMrmDzJdNgZztfP7F7T7mxND3YVNCkJG35a6aJ7edu1sIgCjBxOvV+hv27iYvQ== - -"@lumino/disposable@^1.1.2", "@lumino/disposable@^1.10.0", "@lumino/disposable@^1.10.0 || ^2.0.0-alpha.6", "@lumino/disposable@^1.10.4", "@lumino/disposable@^1.4.3": - version "1.10.4" - resolved "https://registry.yarnpkg.com/@lumino/disposable/-/disposable-1.10.4.tgz#73b452044fecf988d7fa73fac9451b1a7f987323" - integrity sha512-4ZxyYcyzUS+ZeB2KAH9oAH3w0DUUceiVr+FIZHZ2TAYGWZI/85WlqJtfm0xjwEpCwLLW1TDqJrISuZu3iMmVMA== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/signaling" "^1.11.1" - -"@lumino/domutils@^1.8.0", "@lumino/domutils@^1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@lumino/domutils/-/domutils-1.8.2.tgz#d15cdbae12bea52852bbc13c4629360f9f05b7f5" - integrity sha512-QIpMfkPJrs4GrWBuJf2Sn1fpyVPmvqUUAeD8xAQo8+4V5JAT0vUDLxZ9HijefMgNCi3+Bs8Z3lQwRCrz+cFP1A== - -"@lumino/dragdrop@^1.13.0", "@lumino/dragdrop@^1.14.5", "@lumino/dragdrop@^1.3.0": - version "1.14.5" - resolved "https://registry.yarnpkg.com/@lumino/dragdrop/-/dragdrop-1.14.5.tgz#1db76c8a01f74cb1b0428db6234e820bb58b93ba" - integrity sha512-LC5xB82+xGF8hFyl716TMpV32OIMIMl+s3RU1PaqDkD6B7PkgiVk6NkJ4X9/GcEvl2igkvlGQt/3L7qxDAJNxw== - dependencies: - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - -"@lumino/keyboard@^1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@lumino/keyboard/-/keyboard-1.8.2.tgz#714dbe671f0718f516d1ec23188b31a9ccd82fb2" - integrity sha512-Dy+XqQ1wXbcnuYtjys5A0pAqf4SpAFl9NY6owyIhXAo0Va7w3LYp3jgiP1xAaBAwMuUppiUAfrbjrysZuZ625g== - -"@lumino/messaging@^1.10.0", "@lumino/messaging@^1.10.3", "@lumino/messaging@^1.7.1": - version "1.10.3" - resolved "https://registry.yarnpkg.com/@lumino/messaging/-/messaging-1.10.3.tgz#b6227bdfc178a8542571625ecb68063691b6af3c" - integrity sha512-F/KOwMCdqvdEG8CYAJcBSadzp6aI7a47Fr60zAKGqZATSRRRV41q53iXU7HjFPqQqQIvdn9Z7J32rBEAyQAzww== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/collections" "^1.9.3" - -"@lumino/polling@^1.3.3", "@lumino/polling@^1.9.0": - version "1.11.4" - resolved "https://registry.yarnpkg.com/@lumino/polling/-/polling-1.11.4.tgz#ddfe47da5b41af4cfa474898542c099e445c0e6c" - integrity sha512-yC7JLssj3mqVK6TsYj7dg4AG0rcsC42YtpoDLtz9yzO84Q5flQUfmjAPQB6oPA6wZOlISs3iasF+uO2w1ls5jg== - dependencies: - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - "@lumino/signaling" "^1.11.1" - -"@lumino/properties@^1.8.0", "@lumino/properties@^1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@lumino/properties/-/properties-1.8.2.tgz#91131f2ca91a902faa138771eb63341db78fc0fd" - integrity sha512-EkjI9Cw8R0U+xC9HxdFSu7X1tz1H1vKu20cGvJ2gU+CXlMB1DvoYJCYxCThByHZ+kURTAap4SE5x8HvKwNPbig== - -"@lumino/signaling@^1.10.0", "@lumino/signaling@^1.10.0 || ^2.0.0-alpha.6", "@lumino/signaling@^1.11.1", "@lumino/signaling@^1.2.2", "@lumino/signaling@^1.4.3": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@lumino/signaling/-/signaling-1.11.1.tgz#438f447a1b644fd286549804f9851b5aec9679a2" - integrity sha512-YCUmgw08VoyMN5KxzqPO3KMx+cwdPv28tAN06C0K7Q/dQf+oufb1XocuhZb5selTrTmmuXeizaYxgLIQGdS1fA== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/properties" "^1.8.2" - -"@lumino/virtualdom@^1.14.0", "@lumino/virtualdom@^1.14.3": - version "1.14.3" - resolved "https://registry.yarnpkg.com/@lumino/virtualdom/-/virtualdom-1.14.3.tgz#e490c36ff506d877cf45771d6968e3e26a8919fd" - integrity sha512-5joUC1yuxeXbpfbSBm/OR8Mu9HoTo6PDX0RKqzlJ9o97iml7zayFN/ynzcxScKGQAo9iaXOY8uVIvGUT8FnsGw== - dependencies: - "@lumino/algorithm" "^1.9.2" - -"@lumino/widgets@^1.17.0", "@lumino/widgets@^1.37.2", "@lumino/widgets@^1.37.2 || ^2.1.1", "@lumino/widgets@^1.6.0": - version "1.37.2" - resolved "https://registry.yarnpkg.com/@lumino/widgets/-/widgets-1.37.2.tgz#b408fae221ecec2f1b028607782fbe1e82588bce" - integrity sha512-NHKu1NBDo6ETBDoNrqSkornfUCwc8EFFzw6+LWBfYVxn2PIwciq2SdiJGEyNqL+0h/A9eVKb5ui5z4cwpRekmQ== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/commands" "^1.21.1" - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - "@lumino/domutils" "^1.8.2" - "@lumino/dragdrop" "^1.14.5" - "@lumino/keyboard" "^1.8.2" - "@lumino/messaging" "^1.10.3" - "@lumino/properties" "^1.8.2" - "@lumino/signaling" "^1.11.1" - "@lumino/virtualdom" "^1.14.3" - -"@material-ui/core@^4.8.2": - version "4.12.4" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73" - integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.11.5" - "@material-ui/system" "^4.12.2" - "@material-ui/types" "5.1.0" - "@material-ui/utils" "^4.11.3" - "@types/react-transition-group" "^4.2.0" - clsx "^1.0.4" - hoist-non-react-statics "^3.3.2" - popper.js "1.16.1-lts" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - react-transition-group "^4.4.0" - -"@material-ui/icons@^4.5.1": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.3.tgz#b0693709f9b161ce9ccde276a770d968484ecff1" - integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA== - dependencies: - "@babel/runtime" "^7.4.4" - -"@material-ui/lab@^4.0.0-alpha.54": - version "4.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz#9bf8eb389c0c26c15e40933cc114d4ad85e3d978" - integrity sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.3" - clsx "^1.0.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - -"@material-ui/styles@^4.11.5": - version "4.11.5" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.5.tgz#19f84457df3aafd956ac863dbe156b1d88e2bbfb" - integrity sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/hash" "^0.8.0" - "@material-ui/types" "5.1.0" - "@material-ui/utils" "^4.11.3" - clsx "^1.0.4" - csstype "^2.5.2" - hoist-non-react-statics "^3.3.2" - jss "^10.5.1" - jss-plugin-camel-case "^10.5.1" - jss-plugin-default-unit "^10.5.1" - jss-plugin-global "^10.5.1" - jss-plugin-nested "^10.5.1" - jss-plugin-props-sort "^10.5.1" - jss-plugin-rule-value-function "^10.5.1" - jss-plugin-vendor-prefixer "^10.5.1" - prop-types "^15.7.2" - -"@material-ui/system@^4.12.2": - version "4.12.2" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.2.tgz#f5c389adf3fce4146edd489bf4082d461d86aa8b" - integrity sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.3" - csstype "^2.5.2" - prop-types "^15.7.2" - -"@material-ui/types@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" - integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== - -"@material-ui/utils@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.3.tgz#232bd86c4ea81dab714f21edad70b7fdf0253942" - integrity sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg== - dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@pkgr/utils@^2.3.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" - integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== - dependencies: - cross-spawn "^7.0.3" - fast-glob "^3.3.0" - is-glob "^4.0.3" - open "^9.1.0" - picocolors "^1.0.0" - tslib "^2.6.0" - -"@playwright/test@^1.16.2", "@playwright/test@^1.32.1": - version "1.36.2" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.36.2.tgz#9edd68a02b0929c5d78d9479a654ceb981dfb592" - integrity sha512-2rVZeyPRjxfPH6J0oGJqE8YxiM1IBRyM8hyrXYK7eSiAqmbNhxwcLa7dZ7fy9Kj26V7FYia5fh9XJRq4Dqme+g== - dependencies: - "@types/node" "*" - playwright-core "1.36.2" - optionalDependencies: - fsevents "2.3.2" - -"@rjsf/core@^3.1.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@rjsf/core/-/core-3.2.1.tgz#8a7b24c9a6f01f0ecb093fdfc777172c12b1b009" - integrity sha512-dk8ihvxFbcuIwU7G+HiJbFgwyIvaumPt5g5zfnuC26mwTUPlaDGFXKK2yITp8tJ3+hcwS5zEXtAN9wUkfuM4jA== - dependencies: - "@types/json-schema" "^7.0.7" - ajv "^6.7.0" - core-js-pure "^3.6.5" - json-schema-merge-allof "^0.6.0" - jsonpointer "^5.0.0" - lodash "^4.17.15" - nanoid "^3.1.23" - prop-types "^15.7.2" - react-is "^16.9.0" - -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@stdlib/array@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/array/-/array-0.0.12.tgz#12f40ab95bb36d424cdad991f29fc3cb491ee29e" - integrity sha512-nDksiuvRC1dSTHrf5yOGQmlRwAzSKV8MdFQwFSvLbZGGhi5Y4hExqea5HloLgNVouVs8lnAFi2oubSM4Mc7YAg== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/blas" "^0.0.x" - "@stdlib/complex" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/assert@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/assert/-/assert-0.0.12.tgz#1648c9016e5041291f55a6464abcc4069c5103ce" - integrity sha512-38FxFf+ZoQZbdc+m09UsWtaCmzd/2e7im0JOaaFYE7icmRfm+4KiE9BRvBT4tIn7ioLB2f9PsBicKjIsf+tY1w== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/complex" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/ndarray" "^0.0.x" - "@stdlib/number" "^0.0.x" - "@stdlib/os" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/regexp" "^0.0.x" - "@stdlib/streams" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/bigint@^0.0.x": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@stdlib/bigint/-/bigint-0.0.11.tgz#c416a1d727001c55f4897e6424124199d638f2fd" - integrity sha512-uz0aYDLABAYyqxaCSHYbUt0yPkXYUCR7TrVvHN+UUD3i8FZ02ZKcLO+faKisDyxKEoSFTNtn3Ro8Ir5ebOlVXQ== - dependencies: - "@stdlib/utils" "^0.0.x" - -"@stdlib/blas@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/blas/-/blas-0.0.12.tgz#7e93e42b4621fc6903bf63264f045047333536c2" - integrity sha512-nWY749bWceuoWQ7gz977blCwR7lyQ/rsIXVO4b600h+NFpeA2i/ea7MYC680utIbeu2cnDWHdglBPoK535VAzA== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/number" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/buffer@^0.0.x": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@stdlib/buffer/-/buffer-0.0.11.tgz#6137b00845e6c905181cc7ebfae9f7e47c01b0ce" - integrity sha512-Jeie5eDDa1tVuRcuU+cBXI/oOXSmMxUUccZpqXzgYe0IO8QSNtNxv9mUTzJk/m5wH+lmLoDvNxzPpOH9TODjJg== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/cli@^0.0.x": - version "0.0.10" - resolved "https://registry.yarnpkg.com/@stdlib/cli/-/cli-0.0.10.tgz#28e2fbe6865d7f5cd15b7dc5846c99bd3b91674f" - integrity sha512-OITGaxG46kwK799+NuOd/+ccosJ9koVuQBC610DDJv0ZJf8mD7sbjGXrmue9C4EOh8MP7Vm/6HN14BojX8oTCg== - dependencies: - "@stdlib/utils" "^0.0.x" - minimist "^1.2.0" - -"@stdlib/complex@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/complex/-/complex-0.0.12.tgz#3afbc190cd0a9b37fc7c6e508c3aa9fda9106944" - integrity sha512-UbZBdaUxT2G+lsTIrVlRZwx2IRY6GXnVILggeejsIVxHSuK+oTyapfetcAv0FJFLP+Rrr+ZzrN4b9G3hBw6NHA== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/constants@^0.0.x": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@stdlib/constants/-/constants-0.0.11.tgz#78cd56d6c2982b30264843c3d75bde7125e90cd2" - integrity sha512-cWKy0L9hXHUQTvFzdPkTvZnn/5Pjv7H4UwY0WC1rLt+A5CxFDJKjvnIi9ypSzJS3CAiGl1ZaHCdadoqXhNdkUg== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/number" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/fs@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/fs/-/fs-0.0.12.tgz#662365fd5846a51f075724b4f2888ae88441b70d" - integrity sha512-zcDLbt39EEM3M3wJW6luChS53B8T+TMJkjs2526UpKJ71O0/0adR57cI7PfCpkMd33d05uM7GM+leEj4eks4Cw== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/utils" "^0.0.x" - debug "^2.6.9" - -"@stdlib/math@^0.0.x": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@stdlib/math/-/math-0.0.11.tgz#eb6638bc03a20fbd6727dd5b977ee0170bda4649" - integrity sha512-qI78sR1QqGjHj8k/aAqkZ51Su2fyBvaR/jMKQqcB/ML8bpYpf+QGlGvTty5Qdru/wpqds4kVFOVbWGcNFIV2+Q== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/ndarray" "^0.0.x" - "@stdlib/number" "^0.0.x" - "@stdlib/strided" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - debug "^2.6.9" - -"@stdlib/ndarray@^0.0.x": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@stdlib/ndarray/-/ndarray-0.0.13.tgz#2e8fc645e10f56a645a0ab81598808c0e8f43b82" - integrity sha512-Z+U9KJP4U2HWrLtuAXSPvhNetAdqaNLMcliR6S/fz+VPlFDeymRK7omRFMgVQ+1zcAvIgKZGJxpLC3vjiPUYEw== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/bigint" "^0.0.x" - "@stdlib/buffer" "^0.0.x" - "@stdlib/complex" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/number" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/nlp@^0.0.x": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@stdlib/nlp/-/nlp-0.0.11.tgz#532ec0f7267b8d639e4c20c6de864e8de8a09054" - integrity sha512-D9avYWANm0Db2W7RpzdSdi5GxRYALGAqUrNnRnnKIO6sMEfr/DvONoAbWruda4QyvSC+0MJNwcEn7+PHhRwYhw== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/random" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/number@^0.0.x": - version "0.0.10" - resolved "https://registry.yarnpkg.com/@stdlib/number/-/number-0.0.10.tgz#4030ad8fc3fac19a9afb415c443cee6deea0e65c" - integrity sha512-RyfoP9MlnX4kccvg8qv7vYQPbLdzfS1Mnp/prGOoWhvMG3pyBwFAan34kwFb5IS/zHC3W5EmrgXCV2QWyLg/Kg== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/os" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/os@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/os/-/os-0.0.12.tgz#08bbf013c62a7153099fa9cbac086ca1349a4677" - integrity sha512-O7lklZ/9XEzoCmYvzjPh7jrFWkbpOSHGI71ve3dkSvBy5tyiSL3TtivfKsIC+9ZxuEJZ3d3lIjc9e+yz4HVbqQ== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/process@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/process/-/process-0.0.12.tgz#123325079d89a32f4212f72fb694f8fe3614cf18" - integrity sha512-P0X0TMvkissBE1Wr877Avi2/AxmP7X5Toa6GatHbpJdDg6jQmN4SgPd+NZNp98YtZUyk478c8XSIzMr1krQ20g== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/buffer" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/streams" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/random@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/random/-/random-0.0.12.tgz#e819c3abd602ed5559ba800dba751e49c633ff85" - integrity sha512-c5yND4Ahnm9Jx0I+jsKhn4Yrz10D53ALSrIe3PG1qIz3kNFcIPnmvCuNGd+3V4ch4Mbrez55Y8z/ZC5RJh4vJQ== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/blas" "^0.0.x" - "@stdlib/buffer" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/stats" "^0.0.x" - "@stdlib/streams" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - debug "^2.6.9" - readable-stream "^2.1.4" - -"@stdlib/regexp@^0.0.x": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@stdlib/regexp/-/regexp-0.0.13.tgz#80b98361dc7a441b47bc3fa964bb0c826759e971" - integrity sha512-3JT5ZIoq/1nXY+dY+QtkU8/m7oWDeekyItEEXMx9c/AOf0ph8fmvTUGMDNfUq0RetcznFe3b66kFz6Zt4XHviA== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/stats@^0.0.13", "@stdlib/stats@^0.0.x": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@stdlib/stats/-/stats-0.0.13.tgz#87c973f385379d794707c7b5196a173dba8b07e1" - integrity sha512-hm+t32dKbx/L7+7WlQ1o4NDEzV0J4QSnwFBCsIMIAO8+VPxTZ4FxyNERl4oKlS3hZZe4AVKjoOVhBDtgEWrS4g== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/blas" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/ndarray" "^0.0.x" - "@stdlib/random" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/streams@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/streams/-/streams-0.0.12.tgz#07f5ceae5852590afad8e1cb7ce94174becc8739" - integrity sha512-YLUlXwjJNknHp92IkJUdvn5jEQjDckpawKhDLLCoxyh3h5V+w/8+61SH7TMTfKx5lBxKJ8vvtchZh90mIJOAjQ== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/buffer" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - debug "^2.6.9" - readable-stream "^2.1.4" - -"@stdlib/strided@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/strided/-/strided-0.0.12.tgz#86ac48e660cb7f64a45cf07e80cbbfe58be21ae1" - integrity sha512-1NINP+Y7IJht34iri/bYLY7TVxrip51f6Z3qWxGHUCH33kvk5H5QqV+RsmFEGbbyoGtdeHrT2O+xA+7R2e3SNg== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/ndarray" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/string@^0.0.x": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@stdlib/string/-/string-0.0.14.tgz#4feea4f9089ab72428eebb65fe7b93d90a7f34f4" - integrity sha512-1ClvUTPysens7GZz3WsrkFYIFs8qDmnXkyAd3zMvTXgRpy7hqrv6nNzLMQj8BHv5cBWaWPOXYd/cZ+JyMnZNQQ== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/nlp" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/regexp" "^0.0.x" - "@stdlib/streams" "^0.0.x" - "@stdlib/types" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/symbol@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/symbol/-/symbol-0.0.12.tgz#b9f396b0bf269c2985bb7fe99810a8e26d7288c3" - integrity sha512-2IDhpzWVGeLHgsvIsX12RXvf78r7xBkc4QLoRUv3k7Cp61BisR1Ym1p0Tq9PbxT8fknlvLToh9n5RpmESi2d4w== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/time@^0.0.x": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@stdlib/time/-/time-0.0.14.tgz#ea6daa438b1d3b019b99f5091117ee4bcef55d60" - integrity sha512-1gMFCQTabMVIgww+k4g8HHHIhyy1tIlvwT8mC0BHW7Q7TzDAgobwL0bvor+lwvCb5LlDAvNQEpaRgVT99QWGeQ== - dependencies: - "@stdlib/assert" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/utils" "^0.0.x" - -"@stdlib/types@^0.0.x": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@stdlib/types/-/types-0.0.14.tgz#02d3aab7a9bfaeb86e34ab749772ea22f7b2f7e0" - integrity sha512-AP3EI9/il/xkwUazcoY+SbjtxHRrheXgSbWZdEGD+rWpEgj6n2i63hp6hTOpAB5NipE0tJwinQlDGOuQ1lCaCw== - -"@stdlib/utils@^0.0.x": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@stdlib/utils/-/utils-0.0.12.tgz#670de5a7b253f04f11a4cba38f790e82393bcb46" - integrity sha512-+JhFpl6l7RSq/xGnbWRQ5dAL90h9ONj8MViqlb7teBZFtePZLMwoRA1wssypFcJ8SFMRWQn7lPmpYVUkGwRSOg== - dependencies: - "@stdlib/array" "^0.0.x" - "@stdlib/assert" "^0.0.x" - "@stdlib/blas" "^0.0.x" - "@stdlib/buffer" "^0.0.x" - "@stdlib/cli" "^0.0.x" - "@stdlib/constants" "^0.0.x" - "@stdlib/fs" "^0.0.x" - "@stdlib/math" "^0.0.x" - "@stdlib/os" "^0.0.x" - "@stdlib/process" "^0.0.x" - "@stdlib/random" "^0.0.x" - "@stdlib/regexp" "^0.0.x" - "@stdlib/streams" "^0.0.x" - "@stdlib/string" "^0.0.x" - "@stdlib/symbol" "^0.0.x" - "@stdlib/time" "^0.0.x" - "@stdlib/types" "^0.0.x" - debug "^2.6.9" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" - integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" - integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== - dependencies: - "@babel/types" "^7.20.7" - -"@types/cheerio@*": - version "0.22.31" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.31.tgz#b8538100653d6bb1b08a1e46dec75b4f2a5d5eb6" - integrity sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw== - dependencies: - "@types/node" "*" - -"@types/clone@~2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/clone/-/clone-2.1.1.tgz#9b880d0ce9b1f209b5e0bd6d9caa38209db34024" - integrity sha512-BZIU34bSYye0j/BFcPraiDZ5ka6MJADjcDVELGf7glr9K+iE8NYVjFslJFVWzskSxkLLyCrSPScE82/UUoBSvg== - -"@types/codemirror@^0.0.97": - version "0.0.97" - resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.97.tgz#6f2d8266b7f1b34aacfe8c77221fafe324c3d081" - integrity sha512-n5d7o9nWhC49DjfhsxANP7naWSeTzrjXASkUDQh7626sM4zK9XP2EVcHp1IcCf/IPV6c7ORzDUDF3Bkt231VKg== - dependencies: - "@types/tern" "*" - -"@types/diff-match-patch@^1.0.32": - version "1.0.32" - resolved "https://registry.yarnpkg.com/@types/diff-match-patch/-/diff-match-patch-1.0.32.tgz#d9c3b8c914aa8229485351db4865328337a3d09f" - integrity sha512-bPYT5ECFiblzsVzyURaNhljBH2Gh1t9LowgUwciMrNAhFewLkHT2H0Mto07Y4/3KCOGZHRQll3CTtQZ0X11D/A== - -"@types/dom4@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/dom4/-/dom4-2.0.2.tgz#6495303f049689ce936ed328a3e5ede9c51408ee" - integrity sha512-Rt4IC1T7xkCWa0OG1oSsPa0iqnxlDeQqKXZAHrQGLb7wFGncWm85MaxKUjAGejOrUynOgWlFi4c6S6IyJwoK4g== - -"@types/enzyme@^3.1.15": - version "3.10.12" - resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.12.tgz#ac4494801b38188935580642f772ad18f72c132f" - integrity sha512-xryQlOEIe1TduDWAOphR0ihfebKFSWOXpIsk+70JskCfRfW+xALdnJ0r1ZOTo85F9Qsjk6vtlU7edTYHbls9tA== - dependencies: - "@types/cheerio" "*" - "@types/react" "*" - -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.44.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" - integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - -"@types/geojson@7946.0.4": - version "7946.0.4" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.4.tgz#4e049756383c3f055dd8f3d24e63fb543e98eb07" - integrity sha512-MHmwBtCb7OCv1DSivz2UNJXPGU/1btAWRKlqJ2saEhVJkpkvqHMMaOpKg0v4sAbDWSQekHGvPVMM8nQ+Jen03Q== - -"@types/graceful-fs@^4.1.2": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@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@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^26.0.0": - version "26.0.24" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" - integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== - dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" - -"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - -"@types/minimist@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/node@*": - version "20.4.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.8.tgz#b5dda19adaa473a9bf0ab5cbd8f30ec7d43f5c85" - integrity sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/prettier@^2.0.0": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/react-dom@^17.0.0": - version "17.0.17" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.17.tgz#2e3743277a793a96a99f1bf87614598289da68a1" - integrity sha512-VjnqEmqGnasQKV0CWLevqMTXBYG9GbwuE6x3VetERLh0cq2LTptFE73MrQi2S7GkKXCf2GgwItB/melLnxfnsg== - dependencies: - "@types/react" "^17" - -"@types/react-transition-group@^4.2.0": - version "4.4.5" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" - integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== - dependencies: - "@types/react" "*" - -"@types/react-virtualized-auto-sizer@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.1.tgz#b3187dae1dfc4c15880c9cfc5b45f2719ea6ebd4" - integrity sha512-GH8sAnBEM5GV9LTeiz56r4ZhMOUSrP43tAQNSRVxNexDjcNKLCEtnxusAItg1owFUFE6k0NslV26gqVClVvong== - dependencies: - "@types/react" "*" - -"@types/react-window@^1.8.2": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@types/react-window/-/react-window-1.8.5.tgz#285fcc5cea703eef78d90f499e1457e9b5c02fc1" - integrity sha512-V9q3CvhC9Jk9bWBOysPGaWy/Z0lxYcTXLtLipkt2cnRj1JOSFNF7wqGpkScSXMgBwC+fnVRg/7shwgddBG5ICw== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^17", "@types/react@^17.0.0": - version "17.0.50" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.50.tgz#39abb4f7098f546cfcd6b51207c90c4295ee81fc" - integrity sha512-ZCBHzpDb5skMnc1zFXAXnL3l1FAdi+xZvwxK+PkglMmBrwjpp9nKaWuEvrGnSifCJmBFGxZOOFuwC6KH/s0NuA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/resize-observer-browser@^0.1.7": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz#294aaadf24ac6580b8fbd1fe3ab7b59fe85f9ef3" - integrity sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg== - -"@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/semver@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== - -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== - -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/tern@*": - version "0.23.4" - resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" - integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== - dependencies: - "@types/estree" "*" - -"@types/webpack-sources@^0.1.5": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.9.tgz#da69b06eb34f6432e6658acb5a6893c55d983920" - integrity sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.6.1" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^15.0.0": - version "15.0.15" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" - integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.1.0.tgz#96f3ca6615717659d06c9f7161a1d14ab0c49c66" - integrity sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.1.0" - "@typescript-eslint/type-utils" "6.1.0" - "@typescript-eslint/utils" "6.1.0" - "@typescript-eslint/visitor-keys" "6.1.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - natural-compare-lite "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.1.0.tgz#3135bf65dca5340d8650703eb8cb83113e156ee5" - integrity sha512-hIzCPvX4vDs4qL07SYzyomamcs2/tQYXg5DtdAfj35AyJ5PIUqhsLf4YrEIFzZcND7R2E8tpQIZKayxg8/6Wbw== - dependencies: - "@typescript-eslint/scope-manager" "6.1.0" - "@typescript-eslint/types" "6.1.0" - "@typescript-eslint/typescript-estree" "6.1.0" - "@typescript-eslint/visitor-keys" "6.1.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.1.0.tgz#a6cdbe11630614f8c04867858a42dd56590796ed" - integrity sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw== - dependencies: - "@typescript-eslint/types" "6.1.0" - "@typescript-eslint/visitor-keys" "6.1.0" - -"@typescript-eslint/type-utils@6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.1.0.tgz#21cc6c3bc1980b03f9eb4e64580d0c5be6f08215" - integrity sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w== - dependencies: - "@typescript-eslint/typescript-estree" "6.1.0" - "@typescript-eslint/utils" "6.1.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.1.0.tgz#2d607c62827bb416ada5c96ebfa2ef84e45a8dfa" - integrity sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ== - -"@typescript-eslint/typescript-estree@6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.1.0.tgz#ea382f6482ba698d7e993a88ce5391ea7a66c33d" - integrity sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg== - dependencies: - "@typescript-eslint/types" "6.1.0" - "@typescript-eslint/visitor-keys" "6.1.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.1.0.tgz#1641843792b4e3451cc692e2c73055df8b26f453" - integrity sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.1.0" - "@typescript-eslint/types" "6.1.0" - "@typescript-eslint/typescript-estree" "6.1.0" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.1.0.tgz#d2b84dff6b58944d3257ea03687e269a788c73be" - integrity sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A== - dependencies: - "@typescript-eslint/types" "6.1.0" - eslint-visitor-keys "^3.4.1" - -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" - integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== - -"@webpack-cli/info@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" - integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" - integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== - -"@wojtekmaj/enzyme-adapter-react-17@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.8.0.tgz#138f404f82f502d152242c049e87d9621dcda4bd" - integrity sha512-zeUGfQRziXW7R7skzNuJyi01ZwuKCH8WiBNnTgUJwdS/CURrJwAhWsfW7nG7E30ak8Pu3ZwD9PlK9skBfAoOBw== - dependencies: - "@wojtekmaj/enzyme-adapter-utils" "^0.2.0" - enzyme-shallow-equal "^1.0.0" - has "^1.0.0" - prop-types "^15.7.0" - react-is "^17.0.0" - react-test-renderer "^17.0.0" - -"@wojtekmaj/enzyme-adapter-utils@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.2.0.tgz#dc2a8c14f92e502da28ea6b3fad96a082076d028" - integrity sha512-ZvZm9kZxZEKAbw+M1/Q3iDuqQndVoN8uLnxZ8bzxm7KgGTBejrGRoJAp8f1EN8eoO3iAjBNEQnTDW/H4Ekb0FQ== - dependencies: - function.prototype.name "^1.1.0" - has "^1.0.0" - object.fromentries "^2.0.0" - prop-types "^15.7.0" - -"@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== - -"@yarnpkg/lockfile@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - -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== - -abstract-leveldown@^6.2.1, abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -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-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -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@^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.2.4, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-keywords@^3.5.2: - 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.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.7.0: - 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" - -ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -all-contributors-cli@^6.14.0: - version "6.20.5" - resolved "https://registry.yarnpkg.com/all-contributors-cli/-/all-contributors-cli-6.20.5.tgz#b1e03f20affe9752d26456cfe33ceca6d7192e5a" - integrity sha512-vWAR4+SyF9ZpkpbFoldCYbuAb8qkzjkj8uW4yJJN2fN48VRO+E7xGTnt+cLTQt5RNgj00MoYx/LJbWesjeSehQ== - dependencies: - "@babel/runtime" "^7.7.6" - async "^3.1.0" - chalk "^4.0.0" - didyoumean "^1.2.1" - inquirer "^7.3.3" - json-fixer "^1.6.8" - lodash "^4.11.2" - node-fetch "^2.6.0" - pify "^5.0.0" - yargs "^15.0.1" - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -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-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -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.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.0.0, ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -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.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" - -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" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -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-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-includes@^3.1.5, array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -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.filter@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.1.tgz#20688792acdb97a09488eaaee9eebbf3966aae21" - integrity sha512-Dk3Ty7N42Odk7PjU/Ci3zT4pLj20YvuVnneG/58ICM6bt4Ij5kZaJTVQ9TSaWaIECX2sFyz4KItkVZqHNnciqw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -array.prototype.flat@^1.2.3: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -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== - -ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" - integrity sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -async@^3.1.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -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== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-plugin-istanbul@^6.0.0: - 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@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - 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-polyfill-corejs2@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" - integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.4.0" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" - integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" - core-js-compat "^3.30.1" - -babel-plugin-polyfill-regenerator@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" - integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - 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@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -balanced-match@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" - integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== - -base64-js@^1.3.1: - 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" - -basic-auth@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" - integrity sha512-CtGuTyWf3ig+sgRyC7uP6DM3N+5ur/p8L+FPfsd+BbIfIs74TFfCajZTHnCw6K5dqM0bZEbRIqRy1fAdiUJhTA== - -big-integer@^1.6.44: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== - -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== - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -bplist-parser@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== - dependencies: - big-integer "^1.6.44" - -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" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^2.3.1: - 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.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" - -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== - -browserslist@^4.14.5, browserslist@^4.21.5, browserslist@^4.21.9: - version "4.21.10" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - -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" - -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bundle-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" - integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== - dependencies: - run-applescript "^5.0.0" - -cacache@^15.0.5: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -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" - -call-bind@^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== - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-7.0.2.tgz#d048d8c69448745bb0de6fc4c1c52a30dfbe7252" - integrity sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg== - dependencies: - camelcase "^6.3.0" - map-obj "^4.1.0" - quick-lru "^5.1.1" - type-fest "^1.2.1" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== - -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== - -camelcase@^6.0.0, camelcase@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001517: - version "1.0.30001519" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz#3e7b8b8a7077e78b0eb054d69e6edf5c7df35601" - integrity sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -chalk@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== - -chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - 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@^4.0.0, chalk@^4.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" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - -cheerio@^1.0.0-rc.3: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - -child_process@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/child_process/-/child_process-1.0.2.tgz#b1f7e7fc73d25e7fd1d455adc94e143830182b5a" - integrity sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chrome-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== - -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== - -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" - -classnames@^2.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== - -clean-css@4.2.x: - version "4.2.4" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" - integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.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" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - -clsx@^1.0.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -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 sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - -codemirror@~5.61.0: - version "5.61.1" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.61.1.tgz#ccfc8a43b8fcfb8b12e8e75b5ffde48d541406e0" - integrity sha512-+D1NZjAucuzE93vJGbAaXzvoBHwp9nJZWWWF9utjv25+5AZUiah6CIlfb4ikG4MoDsFsCG8niiJH5++OO2LgIQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -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 sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -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== - -colord@^2.9.3: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.14, colorette@^2.0.19: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.8: - 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, commander@^2.11.0, commander@^2.19.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@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - -commander@7, commander@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - -commander@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.0.0.tgz#2b270da94f8fb9014455312f829a1129dbf8887e" - integrity sha512-s7EA+hDtTYNhuXkTlhqew4txMZVdszBmKWSPEMxGr8ru8JXR7bLUFIAtPhcSuFdJQ0ILMxnJi8GkQL0yvDy/YA== - -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== - -compute-gcd@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/compute-gcd/-/compute-gcd-1.2.1.tgz#34d639f3825625e1357ce81f0e456a6249d8c77f" - integrity sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg== - dependencies: - validate.io-array "^1.0.3" - validate.io-function "^1.0.2" - validate.io-integer-array "^1.0.0" - -compute-lcm@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/compute-lcm/-/compute-lcm-1.1.2.tgz#9107c66b9dca28cefb22b4ab4545caac4034af23" - integrity sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ== - dependencies: - compute-gcd "^1.2.1" - validate.io-array "^1.0.3" - validate.io-function "^1.0.2" - validate.io-integer-array "^1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -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-compat@^3.30.1, core-js-compat@^3.30.2: - version "3.30.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.2.tgz#83f136e375babdb8c80ad3c22d67c69098c1dd8b" - integrity sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA== - dependencies: - browserslist "^4.21.5" - -core-js-pure@^3.6.5: - version "3.32.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.32.0.tgz#5d79f85da7a4373e9a06494ccbef995a4c639f8b" - integrity sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -corser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" - integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ== - -cosmiconfig@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" - integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== - dependencies: - import-fresh "^3.2.1" - js-yaml "^4.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - -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@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -css-functions-list@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b" - integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w== - -css-loader@^5.0.1: - version "5.2.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" - integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== - dependencies: - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.15" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.5" - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css-vendor@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" - integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== - dependencies: - "@babel/runtime" "^7.8.3" - is-in-browser "^1.0.2" - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -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@3.0.10, csstype@^3.0.2, csstype@~3.0.3: - version "3.0.10" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" - integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== - -csstype@^2.5.2: - version "2.6.21" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" - integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== - -"d3-array@1 - 3", "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3.2.2, d3-array@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.2.tgz#f8ac4705c5b06914a7e0025bbf8d5f1513f6a86e" - integrity sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ== - dependencies: - internmap "1 - 2" - -"d3-color@1 - 3", d3-color@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" - integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== - -d3-delaunay@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b" - integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== - dependencies: - delaunator "5" - -"d3-dispatch@1 - 3": - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" - integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== - -d3-dsv@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" - integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== - dependencies: - commander "7" - iconv-lite "0.6" - rw "1" - -d3-force@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4" - integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== - dependencies: - d3-dispatch "1 - 3" - d3-quadtree "1 - 3" - d3-timer "1 - 3" - -"d3-format@1 - 3", d3-format@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" - integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== - -d3-geo-projection@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz#dc229e5ead78d31869a4e87cf1f45bd2716c48ca" - integrity sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg== - dependencies: - commander "7" - d3-array "1 - 3" - d3-geo "1.12.0 - 3" - -"d3-geo@1.12.0 - 3", d3-geo@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.0.tgz#74fd54e1f4cebd5185ac2039217a98d39b0a4c0e" - integrity sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA== - dependencies: - d3-array "2.5.0 - 3" - -d3-hierarchy@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6" - integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== - -"d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" - integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== - dependencies: - d3-color "1 - 3" - -d3-path@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" - integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== - -"d3-quadtree@1 - 3": - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f" - integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== - -d3-scale@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" - integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== - dependencies: - d3-array "2.10.0 - 3" - d3-format "1 - 3" - d3-interpolate "1.2.0 - 3" - d3-time "2.1.1 - 3" - d3-time-format "2 - 4" - -d3-shape@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" - integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== - dependencies: - d3-path "^3.1.0" - -"d3-time-format@2 - 4", d3-time-format@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" - integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== - dependencies: - d3-time "1 - 3" - -"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" - integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== - dependencies: - d3-array "2 - 3" - -"d3-timer@1 - 3", d3-timer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" - integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== - -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" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.2.0, debug@^2.3.3, 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.2.7: - 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" - -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decamelize@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9" - integrity sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA== - -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -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== - -deep-equal@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -default-browser-id@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" - integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== - dependencies: - bplist-parser "^0.2.0" - untildify "^4.0.0" - -default-browser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" - integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== - dependencies: - bundle-name "^3.0.0" - default-browser-id "^3.0.0" - execa "^7.1.1" - titleize "^3.0.0" - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== - -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -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" - -delaunator@5: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b" - integrity sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw== - dependencies: - robust-predicates "^3.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -didyoumean@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -diff-match-patch@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" - integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== - -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -discontinuous-range@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" - integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== - dependencies: - "@babel/runtime" "^7.1.2" - -dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -dom4@^2.1.5: - version "2.1.6" - resolved "https://registry.yarnpkg.com/dom4/-/dom4-2.1.6.tgz#c90df07134aa0dbd81ed4d6ba1237b36fc164770" - integrity sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA== - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -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@^4.0.0, domhandler@^4.2.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^2.5.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.1" - -duplicate-package-checker-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/duplicate-package-checker-webpack-plugin/-/duplicate-package-checker-webpack-plugin-3.0.0.tgz#78bb89e625fa7cf8c2a59c53f62b495fda9ba287" - integrity sha512-aO50/qPC7X2ChjRFniRiscxBLT/K01bALqfcDaf8Ih5OqQ1N4iT/Abx9Ofu3/ms446vHTm46FACIuJUmgUQcDQ== - dependencies: - chalk "^2.3.0" - find-root "^1.0.0" - lodash "^4.17.4" - semver "^5.4.1" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -electron-to-chromium@^1.4.477: - version "1.4.487" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.487.tgz#e2ef8b15f2791bf68fa6f38f2656f1a551d360ae" - integrity sha512-XbCRs/34l31np/p33m+5tdBrdXu9jJkZxSbNxj5I0H1KtV2ZMSB+i/HYqDiRzHaFx2T5EdytjoBRe8QRJE2vQg== - -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== - -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== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -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== - -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.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@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== - -envinfo@^7.7.3: - version "7.10.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" - integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== - -enzyme-shallow-equal@^1.0.0, enzyme-shallow-equal@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz#5528a897a6ad2bdc417c7221a7db682cd01711ba" - integrity sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg== - dependencies: - has "^1.0.3" - object-is "^1.1.5" - -enzyme@^3.7.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.11.0.tgz#71d680c580fe9349f6f5ac6c775bc3e6b7a79c28" - integrity sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw== - dependencies: - array.prototype.flat "^1.2.3" - cheerio "^1.0.0-rc.3" - enzyme-shallow-equal "^1.0.1" - function.prototype.name "^1.1.2" - has "^1.0.3" - html-element-map "^1.2.0" - is-boolean-object "^1.0.1" - is-callable "^1.1.5" - is-number-object "^1.0.4" - is-regex "^1.0.5" - is-string "^1.0.5" - is-subset "^0.1.1" - lodash.escape "^4.0.1" - lodash.isequal "^4.5.0" - object-inspect "^1.7.0" - object-is "^1.0.2" - object.assign "^4.1.0" - object.entries "^1.1.1" - object.values "^1.1.1" - raf "^3.4.1" - rst-selector-parser "^2.2.3" - string.prototype.trim "^1.2.1" - -errno@~0.1.1: - 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.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== - dependencies: - array-buffer-byte-length "^1.0.0" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-module-lexer@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" - integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== - -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -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" - -es6-templates@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" - integrity sha512-sziUVwcvQ+lOsrTyUY0Q11ilAPj+dy7AQ1E1MgSaHTaaAFTffaa08QSlGNU61iyVaroyb6nYdBV6oD7nzn6i8w== - dependencies: - recast "~0.11.12" - through "~2.3.6" - -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.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-prettier@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" - integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== - -eslint-plugin-prettier@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz#6887780ed95f7708340ec79acfdf60c35b9be57a" - integrity sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.8.5" - -eslint-plugin-react@^7.33.0: - version "7.33.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz#6c356fb0862fec2cd1b04426c669ea746e9b6eb3" - integrity sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.4" - semver "^6.3.1" - string.prototype.matchall "^4.0.8" - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.1.tgz#936821d3462675f25a18ac5fd88a67cc15b393bd" - integrity sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== - -eslint@^8.45.0: - version "8.45.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.45.0.tgz#bab660f90d18e1364352c0a6b7c6db8edb458b78" - integrity sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.1.0" - "@eslint/js" "8.44.0" - "@humanwhocodes/config-array" "^0.11.10" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.6.0" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.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== - -esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg== - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.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.1.0, estraverse@^5.2.0, estraverse@^5.3.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== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -execa@^7.0.0, execa@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" - integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -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" - -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== - dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - -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" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -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" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3, fast-deep-equal@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@~2.1.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 sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fastparse@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-loader@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.0.0.tgz#97bbfaab7a2460c07bcbd72d3a6922407f67649f" - integrity sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.6.5" - -filesize@^10.0.7: - version "10.0.7" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.0.7.tgz#2237a816ee60a83fd0c3382ae70800e54eced3ad" - integrity sha512-iMRG7Qo9nayLoU3PNCiLizYtsy4W1ClrapeCwEgtiQelOAOuRJiw4QaLI+sSr8xr901dgHv+EYP2bCusGZgoiA== - -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@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-package@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-package/-/find-package-1.0.0.tgz#d7738da67e3c5f055c24d3e19aa1aeed063c3e83" - integrity sha512-yVn71XCCaNgxz58ERTl8nA/8YYtIQDY9mHSrgFBfiFtdNNfY0h183Vh8BRkKxD8x9TUw3ec290uJKhDVxqGZBw== - dependencies: - parents "^1.0.1" - -find-root@^1.0.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@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^4.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" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -follow-redirects@^1.0.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -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== - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - 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" - -free-style@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/free-style/-/free-style-3.1.0.tgz#4e2996029534e6b1731611d843437b9e2f473f08" - integrity sha512-vJujYSIyT30iDoaoeigNAxX4yB1RUrh+N2ZMhIElMr3BvCuGXOw7XNJMEEJkDUeamK2Rnb/IKFGKRKlTWIGRWA== - -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-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@2.3.2, fsevents@^2.1.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.0, function.prototype.name@^1.1.2, function.prototype.name@^1.1.5: - 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.2, functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -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== - -genversion@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/genversion/-/genversion-2.3.1.tgz#3246e4fcf374f6476e063804dbf8a82e2cac5429" - integrity sha512-YzfTe91VSZYdLnf8av/aet0uuljOzK99203vineGqhmzdjqRezcSleGma+njVp8RDxzHQY6Pg4MImwchcon3ig== - dependencies: - commander "^2.11.0" - find-package "^1.0.0" - mkdirp "^0.5.1" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -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.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -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@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -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== - -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-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^10.2.5: - version "10.3.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.3.tgz#8360a4ffdd6ed90df84aa8d52f21f452e86a123b" - integrity sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.0.3" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.6: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - 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" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -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== - -globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== - -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -harmony-reflect@^1.4.6: - version "1.6.2" - resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" - integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -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-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -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.0, 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" - -he@1.2.x, he@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -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" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -html-element-map@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.3.1.tgz#44b2cbcfa7be7aa4ff59779e47e51012e1c73c08" - integrity sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg== - dependencies: - array.prototype.filter "^1.0.0" - call-bind "^1.0.2" - -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-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-loader@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.5.tgz#6356dbeb0c49756d8ebd5ca327f16ff06ab5faea" - integrity sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog== - dependencies: - es6-templates "^0.2.3" - fastparse "^1.1.1" - html-minifier "^3.5.8" - loader-utils "^1.1.0" - object-assign "^4.1.1" - -html-minifier@^3.5.8: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-tags@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - -htmlparser2@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -htmlparser2@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" - integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - domutils "^3.0.1" - entities "^4.3.0" - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-proxy@^1.18.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-server@^13.0.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/http-server/-/http-server-13.1.0.tgz#ef2ceb4efd08da87e93ac0f33727ecb9f3f4d629" - integrity sha512-MLqBMXeY/YN0FYMz4ifeOQCcg8pKj8YdmzX1pr/Vb2VrNnbxHN1s4K9BuZRVSyK/j3DQ8UVrrABb8m6EmFjWog== - dependencies: - basic-auth "^1.0.3" - chalk "^4.1.2" - corser "^2.0.1" - he "^1.1.0" - http-proxy "^1.18.0" - mime "^1.6.0" - minimist "^1.2.5" - opener "^1.5.1" - portfinder "^1.0.25" - secure-compare "3.0.1" - union "~0.5.0" - url-join "^2.0.5" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - -husky@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" - integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== - -hyphenate-style-name@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== - -iconv-lite@0.4.24, 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" - -iconv-lite@0.6, iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -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 sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== - dependencies: - harmony-reflect "^1.4.6" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indent-string@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" - integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== - -infer-owner@^1.0.4: - 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 sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4, 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.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.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^7.3.3: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -internal-slot@^1.0.3, internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -"internmap@1 - 2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" - integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -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-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -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-boolean-object@^1.0.1, 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.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.3, is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^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.13.0, is-core-module@^2.5.0, is-core-module@^2.9.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - 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.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -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-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - -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 sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -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 sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - 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 sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -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-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - 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-in-browser@^1.0.2, is-in-browser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g== - -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - -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-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -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 sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -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-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-potential-custom-element-name@^1.0.1: - 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-regex@^1.0.4, is-regex@^1.0.5, 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 sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -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-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - integrity sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw== - -is-symbol@^1.0.2, 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-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-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-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-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.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 sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -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== - -isomorphic.js@^0.2.4: - version "0.2.5" - resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.2.5.tgz#13eecf36f2dba53e85d355e11bf9d4208c6f7f88" - integrity sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw== - -istanbul-lib-coverage@^3.0.0, 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@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - 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" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jackspeak@^2.0.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" - integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== - dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" - -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== - dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" - prompts "^2.0.1" - yargs "^15.4.1" - -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" - chalk "^4.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" - -jest-diff@^26.0.0, jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== - dependencies: - detect-newline "^3.0.0" - -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -jest-fetch-mock@^3.0.0: - 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@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-junit@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-11.1.0.tgz#79cd53948e44d62b2b30fa23ea0d7a899d2c8d7a" - integrity sha512-c2LFOyKY7+ZxL5zSu+WHmHfsJ2wqbOpeYJ4Uu26yMhFxny2J2NQj6AVS7M+Eaxji9Q/oIDDK5tQy0DGzDp9xOw== - dependencies: - mkdirp "^1.0.4" - strip-ansi "^5.2.0" - uuid "^3.3.3" - xml "^1.0.1" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== - dependencies: - chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-raw-loader@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jest-raw-loader/-/jest-raw-loader-1.0.1.tgz#ce9f56d54650f157c4a7d16d224ba5d613bcd626" - integrity sha512-g9oaAjeC4/rIJk1Wd3RxVbOfMizowM7LSjEJqa4R9qDX0OjQNABXOhH+GaznUp+DjTGVPi2vPPbQXyX87DOnYg== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== - dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" - -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" - slash "^3.0.0" - -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - cjs-module-lexer "^0.6.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" - chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" - -jest-summary-reporter@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/jest-summary-reporter/-/jest-summary-reporter-0.0.2.tgz#53b9997b56f343a0dd9af24199c68d371e01f534" - integrity sha512-rZ3ThO57l+ZJCxF74cXIGQU3cV9I7bSBe1ElBp0taE3x2JghgD69bNCKt0LvpVQX5azTRHG7LmcjIpwriVnTng== - dependencies: - chalk "^2.4.1" - -jest-util@^26.1.0, jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== - dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" - chalk "^4.0.0" - jest-get-type "^26.3.0" - leven "^3.1.0" - pretty-format "^26.6.2" - -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== - dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^26.6.2" - string-length "^4.0.1" - -jest-worker@^26.5.0, jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^27.4.5: - 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" - -jest@^26.0.0, jest@^26.4.2: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== - dependencies: - "@jest/core" "^26.6.3" - import-local "^3.0.2" - jest-cli "^26.6.3" - -"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.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsdom@^16.4.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - 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" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - 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.5.0" - ws "^7.4.6" - 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== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-fixer@^1.6.8: - version "1.6.15" - resolved "https://registry.yarnpkg.com/json-fixer/-/json-fixer-1.6.15.tgz#f1f03b6771fcb383695d458c53e50b10999fba7f" - integrity sha512-TuDuZ5KrgyjoCIppdPXBMqiGfota55+odM+j2cQ5rt/XKyKmqGB3Whz1F8SN8+60yYGy/Nu5lbRZ+rx8kBIvBw== - dependencies: - "@babel/runtime" "^7.18.9" - chalk "^4.1.2" - pegjs "^0.10.0" - -json-parse-better-errors@^1.0.1: - 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, json-parse-even-better-errors@^2.3.1: - 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-compare@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/json-schema-compare/-/json-schema-compare-0.2.2.tgz#dd601508335a90c7f4cfadb6b2e397225c908e56" - integrity sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ== - dependencies: - lodash "^4.17.4" - -json-schema-merge-allof@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz#64d48820fec26b228db837475ce3338936bf59a5" - integrity sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ== - dependencies: - compute-lcm "^1.1.0" - json-schema-compare "^0.2.2" - lodash "^4.17.4" - -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-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== - dependencies: - jsonify "~0.0.0" - -json-stringify-pretty-compact@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz#f71ef9d82ef16483a407869556588e91b681d9ab" - integrity sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA== - -json-to-html@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/json-to-html/-/json-to-html-0.1.2.tgz#7a095ae4a34b33534aad0970ca4b7417b2c11ee3" - integrity sha512-gwezGNdnxPnp+7m5aVFq080KGjURyLqLAMmoRlkfnapQYluxQX18Hu+MOPYOtPaipYSB1bawQem5cmvRo/aAMA== - -json5@2.x, json5@^2.1.1, json5@^2.1.2, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -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" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA== - -jsonpointer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== - -jss-plugin-camel-case@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz#76dddfa32f9e62d17daa4e3504991fd0933b89e1" - integrity sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg== - dependencies: - "@babel/runtime" "^7.3.1" - hyphenate-style-name "^1.0.3" - jss "10.9.2" - -jss-plugin-default-unit@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz#3e7f4a1506b18d8fe231554fd982439feb2a9c53" - integrity sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.9.2" - -jss-plugin-global@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz#e7f2ad4a5e8e674fb703b04b57a570b8c3e5c2c2" - integrity sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.9.2" - -jss-plugin-nested@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz#3aa2502816089ecf3981e1a07c49b276d67dca63" - integrity sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.9.2" - tiny-warning "^1.0.2" - -jss-plugin-props-sort@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz#645f6c8f179309667b3e6212f66b59a32fb3f01f" - integrity sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.9.2" - -jss-plugin-rule-value-function@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz#9afe07596e477123cbf11120776be6a64494541f" - integrity sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.9.2" - tiny-warning "^1.0.2" - -jss-plugin-vendor-prefixer@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz#410a0f3b9f8dbbfba58f4d329134df4849aa1237" - integrity sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA== - dependencies: - "@babel/runtime" "^7.3.1" - css-vendor "^2.0.8" - jss "10.9.2" - -jss@10.9.2, jss@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.2.tgz#9379be1f195ef98011dfd31f9448251bd61b95a9" - integrity sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg== - dependencies: - "@babel/runtime" "^7.3.1" - csstype "^3.0.2" - is-in-browser "^1.1.3" - tiny-warning "^1.0.2" - -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" - integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== - dependencies: - array-includes "^3.1.5" - object.assign "^4.1.3" - -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, kind-of@^6.0.3: - 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== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -known-css-properties@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.27.0.tgz#82a9358dda5fe7f7bd12b5e7142c0a205393c0c5" - integrity sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg== - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-js@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" - integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg== - dependencies: - abstract-leveldown "~6.2.3" - buffer "^5.5.0" - inherits "^2.0.3" - ltgt "^2.1.2" - -level-packager@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - -level@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-6.0.1.tgz#dc34c5edb81846a6de5079eac15706334b0d7cd6" - integrity sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw== - dependencies: - level-js "^5.0.0" - level-packager "^5.1.0" - leveldown "^5.4.0" - -leveldown@^5.4.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" - integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== - dependencies: - abstract-leveldown "~6.2.1" - napi-macros "~2.0.0" - node-gyp-build "~4.1.0" - -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lib0@^0.2.31, lib0@^0.2.42, lib0@^0.2.52, lib0@^0.2.72: - version "0.2.78" - resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.78.tgz#9aa34733075caafb3edf228da6e609d15ada0088" - integrity sha512-SV2nU43/6eaYnGH3l0lg2wg1ziB/TH3sAd2E8quXPGwrqo+aX98SNT2ZKucpUr5B8A52jD7ZMjAl+r87Fa/bLQ== - dependencies: - isomorphic.js "^0.2.4" - -license-webpack-plugin@^2.3.14: - version "2.3.21" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.3.21.tgz#152f5e82d5f51f8bab78905731f2b8042aa5691b" - integrity sha512-rVaYU9TddZN3ao8M/0PrRSCdTp2EW6VQymlgsuScld1vef0Ou7fALx3ePe83KLP3xAEDcPK5fkqUVqGBnbz1zQ== - dependencies: - "@types/webpack-sources" "^0.1.5" - webpack-sources "^1.2.0" - -lilconfig@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lint-staged@^13.2.3: - version "13.2.3" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.3.tgz#f899aad6c093473467e9c9e316e3c2d8a28f87a7" - integrity sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg== - dependencies: - chalk "5.2.0" - cli-truncate "^3.1.0" - commander "^10.0.0" - debug "^4.3.4" - execa "^7.0.0" - lilconfig "2.1.0" - listr2 "^5.0.7" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.3" - pidtree "^0.6.0" - string-argv "^0.3.1" - yaml "^2.2.2" - -listr2@^5.0.7: - version "5.0.8" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" - integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.19" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.8.0" - through "^2.3.8" - wrap-ansi "^7.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^1.0.0, loader-utils@^1.1.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0, loader-utils@~2.0.0: - 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@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.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" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash@4.x, lodash@^4.11.2, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, 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-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -loose-envify@^1.0.0, loose-envify@^1.1.0, 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" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== - -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" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== - -ltgt@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -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.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -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-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -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-loader-jest@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/markdown-loader-jest/-/markdown-loader-jest-0.1.1.tgz#7de45f7e6c8644805bd02ca126dfb54a55cf8255" - integrity sha512-osdgJgjxP/9C+vcIkTxU5p91C3+IkD2yY+SvG4GcFOOfAK0mixqepDSkNdMIsCf10KK9DfHjPUslnzKLH1tktg== - dependencies: - html-loader "^0.5.1" - markdown-loader "^2.0.1" - -markdown-loader@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/markdown-loader/-/markdown-loader-2.0.2.tgz#1cdcf11307658cd611046d7db34c2fe80542af7c" - integrity sha512-v/ej7DflZbb6t//3Yu9vg0T+sun+Q9EoqggifeyABKfvFROqPwwwpv+hd1NKT2QxTRg6VCFk10IIJcMI13yCoQ== - dependencies: - loader-utils "^1.1.0" - marked "^0.3.9" - -marked@^0.3.9: - version "0.3.19" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" - integrity sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg== - -marked@^4.0.17: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -mathml-tag-names@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" - integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -"memoize-one@>=3.1.1 <6": - version "5.2.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" - integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -meow@^10.1.5: - version "10.1.5" - resolved "https://registry.yarnpkg.com/meow/-/meow-10.1.5.tgz#be52a1d87b5f5698602b0f32875ee5940904aa7f" - integrity sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw== - dependencies: - "@types/minimist" "^1.2.2" - camelcase-keys "^7.0.0" - decamelize "^5.0.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.2" - read-pkg-up "^8.0.0" - redent "^4.0.0" - trim-newlines "^4.0.2" - type-fest "^1.2.2" - yargs-parser "^20.2.9" - -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== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -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, micromatch@^4.0.4, micromatch@^4.0.5: - 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" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.27: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.0.0, 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== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -min-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -mini-css-extract-plugin@~1.3.2: - version "1.3.9" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.9.tgz#47a32132b0fd97a119acd530e8421e8f6ab16d5e" - integrity sha512-Ac4s+xhVbqlyhXS5J/Vh/QXUz3ycXlCqoCPpg0vdfhsIBH9eg/It/9L1r1XhSCH737M1lqcWnMuWL13zcygn5A== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - webpack-sources "^1.1.0" - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: - 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" - -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.0: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.1: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0, "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.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, mkdirp@^1.0.3, mkdirp@^1.0.4: - 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.6: - 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" - -moment@^2.24.0: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -moo@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" - integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -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== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@^3.1.23, nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -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" - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -nbdime-jupyterlab@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nbdime-jupyterlab/-/nbdime-jupyterlab-2.1.1.tgz#1fc4935002837f527ca7307f8eb1af4682d84257" - integrity sha512-krWE/sdSgbj3COxbErVpfFhDVlH8AAw0cjtqroXYq7VgIG19pykNwpSJ0mua0FbVT4+TrHBXeqchdw0rxSnq2g== - dependencies: - "@jupyterlab/apputils" "^2 || ^3" - "@jupyterlab/coreutils" "^4 || ^5" - "@jupyterlab/nbformat" "^2 || ^3" - "@jupyterlab/notebook" "^2 || ^3" - "@jupyterlab/rendermime" "^2 || ^3" - "@jupyterlab/services" "^5 || ^6" - "@jupyterlab/settingregistry" "^2 || ^3" - "@lumino/algorithm" "^1.1.2" - "@lumino/coreutils" "^1.3.0" - "@lumino/disposable" "^1.1.2" - "@lumino/widgets" "^1.6.0" - nbdime "^6.1.2" - -nbdime@^6.1.1, nbdime@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/nbdime/-/nbdime-6.1.2.tgz#72cee89888ad784093b46812fb1418319a8493ba" - integrity sha512-qUXkOHmSbGHjVkU0KlA2E84n2WRgykVNS6VyUajkhvO41fUhuyrvpus3TBaIzjYO1q9/IwZFhpvb1hDecJzQkg== - dependencies: - "@jupyterlab/codeeditor" "^2 || ^3" - "@jupyterlab/codemirror" "^2 || ^3" - "@jupyterlab/coreutils" "^4 || ^5" - "@jupyterlab/nbformat" "^2 || ^3" - "@jupyterlab/outputarea" "^2 || ^3" - "@jupyterlab/rendermime" "^2 || ^3" - "@jupyterlab/services" "^5 || ^6" - "@lumino/algorithm" "^1.1.2" - "@lumino/coreutils" "^1.3.0" - "@lumino/dragdrop" "^1.3.0" - "@lumino/signaling" "^1.2.2" - "@lumino/widgets" "^1.6.0" - json-stable-stringify "^1.0.1" - -nearley@^2.7.10: - version "2.20.1" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" - integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== - dependencies: - commander "^2.19.0" - moo "^0.5.0" - railroad-diagrams "^1.0.0" - randexp "0.4.6" - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-fetch@2.6.7, node-fetch@^2.6.0, 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-gyp-build@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" - integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -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: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize.css@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" - integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== - -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0, npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.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 sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -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.3, object-inspect@^1.7.0, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-is@^1.0.1, object-is@^1.0.2, object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -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, object.assign@^4.1.3, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.1, object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.fromentries@^2.0.0, object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" - -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.1, object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -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 sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - 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" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -open@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" - integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== - dependencies: - default-browser "^4.0.0" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - is-wsl "^2.2.0" - -opener@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== - -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.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-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.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-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -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== - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== - dependencies: - no-case "^2.2.0" - -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" - -parents@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - integrity sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg== - dependencies: - path-platform "~0.11.15" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - 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" - -parse-srcset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" - integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== - -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== - dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parse5@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" - integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg== - dependencies: - entities "^4.4.0" - -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@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -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 sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -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-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - integrity sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg== - -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -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== - -path@~0.12.7: - version "0.12.7" - resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" - integrity sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q== - dependencies: - process "^0.11.1" - util "^0.10.3" - -pegjs@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" - integrity sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" - integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== - -pidtree@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -playwright-core@1.36.2: - version "1.36.2" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.36.2.tgz#32382f2d96764c24c65a86ea336cf79721c2e50e" - integrity sha512-sQYZt31dwkqxOrP7xy2ggDfEzUxM1lodjhsQ3NMMv5uGTRDsLxU0e4xf4wwMkF2gplIxf17QMBCodSFgm6bFVQ== - -popper.js@1.16.1-lts: - version "1.16.1-lts" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" - integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== - -popper.js@^1.14.4, popper.js@^1.16.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== - -portfinder@^1.0.25: - version "1.0.32" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" - integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== - dependencies: - async "^2.6.4" - debug "^3.2.7" - mkdirp "^0.5.6" - -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== - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== - -postcss-safe-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" - integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== - -postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.2.15, postcss@^8.3.11, postcss@^8.4.24: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae" - integrity sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g== - -pretty-format@^26.0.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -private@~0.1.5: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -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.1, 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.2.3" - resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.2.3.tgz#2edc7e4b81aff781c88a0d577e5fe9da822107c6" - integrity sha512-Og0+jCRQetV84U8wVjMNccfGCnMQ9mGs9Hv78QFe+pSDD3gWTpz0y+1QCuxy5d/vBFuZ3iwP2eycAkvqIMPmWg== - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.0, prop-types@^15.7.2, prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.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== - -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== - -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" - -punycode@^1.4.1: - 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.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@^6.11.0, qs@^6.4.0: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -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== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -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" - -railroad-diagrams@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" - integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== - -randexp@0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" - integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== - dependencies: - discontinuous-range "1.0.0" - ret "~0.1.10" - -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" - -raw-loader@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" - integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -react-dom@^17.0.0, react-dom@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", "react-is@^16.8.0 || ^17.0.0", react-is@^17.0.0, react-is@^17.0.1, react-is@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-is@^16.13.1, react-is@^16.7.0, react-is@^16.9.0: - 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-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - -react-popper@^1.3.7: - version "1.3.11" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" - integrity sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg== - dependencies: - "@babel/runtime" "^7.1.2" - "@hypnosphi/create-react-context" "^0.3.1" - deep-equal "^1.1.1" - popper.js "^1.14.4" - prop-types "^15.6.1" - typed-styles "^0.0.7" - warning "^4.0.2" - -react-shallow-renderer@^16.13.1: - version "16.15.0" - resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" - integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== - dependencies: - object-assign "^4.1.1" - react-is "^16.12.0 || ^17.0.0 || ^18.0.0" - -react-test-renderer@^17.0.0: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.2.tgz#4cd4ae5ef1ad5670fc0ef776e8cc7e1231d9866c" - integrity sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ== - dependencies: - object-assign "^4.1.1" - react-is "^17.0.2" - react-shallow-renderer "^16.13.1" - scheduler "^0.20.2" - -react-transition-group@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== - dependencies: - dom-helpers "^3.4.0" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" - -react-transition-group@^4.4.0: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react-virtualized-auto-sizer@^1.0.2: - version "1.0.7" - resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.7.tgz#bfb8414698ad1597912473de3e2e5f82180c1195" - integrity sha512-Mxi6lwOmjwIjC1X4gABXMJcKHsOo0xWl3E3ugOgufB8GJU+MqrtY35aBuvCYv/razQ1Vbp7h1gWJjGjoNN5pmA== - -react-window@^1.8.5: - version "1.8.7" - resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.7.tgz#5e9fd0d23f48f432d7022cdb327219353a15f0d4" - integrity sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA== - dependencies: - "@babel/runtime" "^7.0.0" - memoize-one ">=3.1.1 <6" - -react@^17.0.0, react@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg-up@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-8.0.0.tgz#72f595b65e66110f43b052dd9af4de6b10534670" - integrity sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ== - dependencies: - find-up "^5.0.0" - read-pkg "^6.0.0" - type-fest "^1.0.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read-pkg@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-6.0.0.tgz#a67a7d6a1c2b0c3cd6aa2ea521f40c458a4a504c" - integrity sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^3.0.2" - parse-json "^5.2.0" - type-fest "^1.0.1" - -readable-stream@^2.1.4: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - 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.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -recast@~0.11.12: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" - integrity sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA== - dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" - -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== - dependencies: - resolve "^1.9.0" - -redent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-4.0.0.tgz#0c0ba7caabb24257ab3bb7a4fd95dd1d5c5681f9" - integrity sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag== - dependencies: - indent-string "^5.0.0" - strip-indent "^4.0.0" - -regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== - dependencies: - "@babel/runtime" "^7.8.4" - -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" - -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -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.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== - -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== - -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -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-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.14.2, resolve@^1.18.1, resolve@^1.9.0: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.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== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.1.tgz#0881323ab94ad45fec7c0221f27ea1a142f3f0d0" - integrity sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg== - dependencies: - glob "^10.2.5" - -robust-predicates@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" - integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== - -rst-selector-parser@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" - integrity sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA== - dependencies: - lodash.flattendeep "^4.4.0" - nearley "^2.7.10" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-applescript@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" - integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== - dependencies: - execa "^5.0.0" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rw@1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" - integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== - -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.8.0: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-buffer@^5.1.0, 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-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -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.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sanitize-html@~2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.7.3.tgz#166c868444ee4f9fd7352ac8c63fa86c343fc2bd" - integrity sha512-jMaHG29ak4miiJ8wgqA1849iInqORgNv7SLfSw9LtfOhEUQ1C0YHKH73R+hgyufBW9ZFeJrb057k9hjlfBCVlw== - dependencies: - deepmerge "^4.2.2" - escape-string-regexp "^4.0.0" - htmlparser2 "^6.0.0" - is-plain-object "^5.0.0" - parse-srcset "^1.0.2" - postcss "^8.3.11" - -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.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^2.6.5, schema-utils@^2.7.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -secure-compare@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" - integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw== - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - 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 sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -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" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -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.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== - -simulate-event@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/simulate-event/-/simulate-event-1.4.0.tgz#7f8a404116280bcbfe26347ddbcbffe5bd2be00e" - integrity sha512-2X/DaXEB9V4BQzavZ8bl15/D42Mtd2WBxRYJNGyQTIhE2uVFZqOCkF/FbY+oWiDNXh7hpFfpQ5gxwz6xYq0UAQ== - dependencies: - xtend "^4.0.1" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -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-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-loader@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.0.2.tgz#b0a6582b2eaa387ede1ecf8061ae0b93c23f9eb0" - integrity sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw== - dependencies: - data-urls "^2.0.0" - iconv-lite "^0.6.2" - loader-utils "^2.0.0" - schema-utils "^2.7.0" - source-map "^0.6.1" - -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.6, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - 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.6, source-map@~0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, 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== - -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== - -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 sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -stack-utils@^2.0.2: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -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" - -string-argv@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.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@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.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@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - -string.prototype.padend@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" - integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -string.prototype.trim@^1.2.1, string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string_decoder@^1.1.1, 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-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.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-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 sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - 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 sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.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@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853" - integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA== - dependencies: - min-indent "^1.0.1" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -style-loader@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== - -stylelint-config-recommended@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz#c48a358cc46b629ea01f22db60b351f703e00597" - integrity sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ== - -stylelint-config-standard@~34.0.0: - version "34.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz#309f3c48118a02aae262230c174282e40e766cf4" - integrity sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ== - dependencies: - stylelint-config-recommended "^13.0.0" - -stylelint@^15.10.1: - version "15.10.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.1.tgz#93f189958687e330c106b010cbec0c41dcae506d" - integrity sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ== - dependencies: - "@csstools/css-parser-algorithms" "^2.3.0" - "@csstools/css-tokenizer" "^2.1.1" - "@csstools/media-query-list-parser" "^2.1.2" - "@csstools/selector-specificity" "^3.0.0" - balanced-match "^2.0.0" - colord "^2.9.3" - cosmiconfig "^8.2.0" - css-functions-list "^3.1.0" - css-tree "^2.3.1" - debug "^4.3.4" - fast-glob "^3.3.0" - fastest-levenshtein "^1.0.16" - file-entry-cache "^6.0.1" - global-modules "^2.0.0" - globby "^11.1.0" - globjoin "^0.1.4" - html-tags "^3.3.1" - ignore "^5.2.4" - import-lazy "^4.0.0" - imurmurhash "^0.1.4" - is-plain-object "^5.0.0" - known-css-properties "^0.27.0" - mathml-tag-names "^2.1.3" - meow "^10.1.5" - micromatch "^4.0.5" - normalize-path "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.24" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^6.0.0" - postcss-selector-parser "^6.0.13" - postcss-value-parser "^4.2.0" - resolve-from "^5.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - style-search "^0.1.0" - supports-hyperlinks "^3.0.0" - svg-tags "^1.0.0" - table "^6.8.1" - write-file-atomic "^5.0.1" - -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.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-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-hyperlinks@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz#c711352a5c89070779b4dad54c05a2f14b15c94b" - integrity sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.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-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== - -svg-url-loader@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/svg-url-loader/-/svg-url-loader-6.0.0.tgz#b94861d9f6badfb8ca3e7d3ec4655c1bf732ac5d" - integrity sha512-Qr5SCKxyxKcRnvnVrO3iQj9EX/v40UiGEMshgegzV7vpo3yc+HexELOdtWcA3MKjL8IyZZ1zOdcILmDEa/8JJQ== - dependencies: - file-loader "~6.0.0" - loader-utils "~2.0.0" - -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== - -synckit@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" - integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== - dependencies: - "@pkgr/utils" "^2.3.1" - tslib "^2.5.0" - -systeminformation@^5.8.6: - version "5.21.8" - resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.21.8.tgz#18395187e5983698619ed07ca8640ae48ec232b2" - integrity sha512-Xf1KDMUTQHLOT9Z7MjpSpsbaICOHcm4OZ9c9qqpkCoXuxq5MoyDrgu5GIQYpoiralXNPrqxDz3ND8MdllpXeQA== - -table@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar@^6.0.2: - version "6.1.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" - integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser-webpack-plugin@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" - integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== - dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - jest-worker "^26.5.0" - p-limit "^3.0.2" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.3.4" - webpack-sources "^1.4.3" - -terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser@^5.16.8, terser@^5.3.4: - version "5.19.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" - integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -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-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -through@^2.3.6, through@^2.3.8, through@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tiny-warning@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -titleize@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" - integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -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 sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -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" - -to-string-loader@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/to-string-loader/-/to-string-loader-1.2.0.tgz#4364aa044b9aa876473f4d7a36ef7d216a276e9c" - integrity sha512-KsWUL8FccgBW9FPFm4vYoQbOOcO5m6hKOGYoXjbseD9/4Ft+ravXN5jolQ9kTKYcK4zPt1j+khx97GPGnVoi6A== - dependencies: - loader-utils "^1.0.0" - -topojson-client@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" - integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== - dependencies: - commander "2" - -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - 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 sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -trim-newlines@^4.0.2: - version "4.1.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-4.1.1.tgz#28c88deb50ed10c7ba6dc2474421904a00139125" - integrity sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ== - -ts-api-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d" - integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A== - -ts-jest@^26.0.0, ts-jest@^26.3.0: - version "26.5.6" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" - integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "^26.1.0" - json5 "2.x" - lodash "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.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== - -tslib@^2.1.0, tslib@^2.5.0, tslib@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== - -tslib@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tslib@~2.5.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" - integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-fest@^1.0.1, type-fest@^1.2.1, type-fest@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typed-styles@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" - integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== - -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" - -typescript@~4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== - -typestyle@^2.0.1, typestyle@^2.0.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/typestyle/-/typestyle-2.4.0.tgz#df5bae6ff15093f5ce51f0caac5ef79428f64e78" - integrity sha512-/d1BL6Qi+YlMLEydnUEB8KL/CAjAN8cyt3/UyGnOyBrWf7bLGcR/6yhmsaUstO2IcYwZfagjE7AIzuI2vUW9mg== - dependencies: - csstype "3.0.10" - free-style "3.1.0" - -uglify-js@3.4.x: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -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" - -union@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" - integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== - dependencies: - qs "^6.4.0" - -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" - -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== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - 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-join@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" - integrity sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow== - -url-loader@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -url-parse@^1.5.3, url-parse@~1.5.1: - 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.1" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.1.tgz#26f90f615427eca1b9f4d6a28288c147e2302a32" - integrity sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA== - dependencies: - punycode "^1.4.1" - qs "^6.11.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.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.10.3: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - -uuid@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate.io-array@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" - integrity sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg== - -validate.io-function@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" - integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ== - -validate.io-integer-array@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz#2cabde033293a6bcbe063feafe91eaf46b13a089" - integrity sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA== - dependencies: - validate.io-array "^1.0.3" - validate.io-integer "^1.0.4" - -validate.io-integer@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068" - integrity sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ== - dependencies: - validate.io-number "^1.0.3" - -validate.io-number@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" - integrity sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg== - -vega-canvas@^1.2.6, vega-canvas@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/vega-canvas/-/vega-canvas-1.2.7.tgz#cf62169518f5dcd91d24ad352998c2248f8974fb" - integrity sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q== - -vega-crossfilter@~4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/vega-crossfilter/-/vega-crossfilter-4.1.1.tgz#3ff3ca0574883706f7a399dc6d60f4a0f065ece4" - integrity sha512-yesvlMcwRwxrtAd9IYjuxWJJuAMI0sl7JvAFfYtuDkkGDtqfLXUcCzHIATqW6igVIE7tWwGxnbfvQLhLNgK44Q== - dependencies: - d3-array "^3.2.2" - vega-dataflow "^5.7.5" - vega-util "^1.17.1" - -vega-dataflow@^5.7.3, vega-dataflow@^5.7.5, vega-dataflow@~5.7.5: - version "5.7.5" - resolved "https://registry.yarnpkg.com/vega-dataflow/-/vega-dataflow-5.7.5.tgz#0d559f3c3a968831f2995e099a2e270993ddfed9" - integrity sha512-EdsIl6gouH67+8B0f22Owr2tKDiMPNNR8lEvJDcxmFw02nXd8juimclpLvjPQriqn6ta+3Dn5txqfD117H04YA== - dependencies: - vega-format "^1.1.1" - vega-loader "^4.5.1" - vega-util "^1.17.1" - -vega-encode@~4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/vega-encode/-/vega-encode-4.9.2.tgz#2426215fba8e6899cdcdda1800b8df662de4ca1c" - integrity sha512-c3J0LYkgYeXQxwnYkEzL15cCFBYPRaYUon8O2SZ6O4PhH4dfFTXBzSyT8+gh8AhBd572l2yGDfxpEYA6pOqdjg== - dependencies: - d3-array "^3.2.2" - d3-interpolate "^3.0.1" - vega-dataflow "^5.7.5" - vega-scale "^7.3.0" - vega-util "^1.17.1" - -vega-event-selector@^3.0.1, vega-event-selector@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vega-event-selector/-/vega-event-selector-3.0.1.tgz#b99e92147b338158f8079d81b28b2e7199c2e259" - integrity sha512-K5zd7s5tjr1LiOOkjGpcVls8GsH/f2CWCrWcpKy74gTCp+llCdwz0Enqo013ZlGaRNjfgD/o1caJRt3GSaec4A== - -vega-expression@^5.0.1, vega-expression@^5.1.0, vega-expression@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/vega-expression/-/vega-expression-5.1.0.tgz#4ec0e66b56a2faba88361eb717011303bbb1ff61" - integrity sha512-u8Rzja/cn2PEUkhQN3zUj3REwNewTA92ExrcASNKUJPCciMkHJEjESwFYuI6DWMCq4hQElQ92iosOAtwzsSTqA== - dependencies: - "@types/estree" "^1.0.0" - vega-util "^1.17.1" - -vega-force@~4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/vega-force/-/vega-force-4.2.0.tgz#5374d0dbac674c92620a9801e12b650b0966336a" - integrity sha512-aE2TlP264HXM1r3fl58AvZdKUWBNOGkIvn4EWyqeJdgO2vz46zSU7x7TzPG4ZLuo44cDRU5Ng3I1eQk23Asz6A== - dependencies: - d3-force "^3.0.0" - vega-dataflow "^5.7.5" - vega-util "^1.17.1" - -vega-format@^1.1.1, vega-format@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vega-format/-/vega-format-1.1.1.tgz#92e4876e18064e7ad54f39045f7b24dede0030b8" - integrity sha512-Rll7YgpYbsgaAa54AmtEWrxaJqgOh5fXlvM2wewO4trb9vwM53KBv4Q/uBWCLK3LLGeBXIF6gjDt2LFuJAUtkQ== - dependencies: - d3-array "^3.2.2" - d3-format "^3.1.0" - d3-time-format "^4.1.0" - vega-time "^2.1.1" - vega-util "^1.17.1" - -vega-functions@^5.13.1, vega-functions@~5.13.2: - version "5.13.2" - resolved "https://registry.yarnpkg.com/vega-functions/-/vega-functions-5.13.2.tgz#928348b7867955be3fb6a2b116fd15b6a24992ad" - integrity sha512-YE1Xl3Qi28kw3vdXVYgKFMo20ttd3+SdKth1jUNtBDGGdrOpvPxxFhZkVqX+7FhJ5/1UkDoAYs/cZY0nRKiYgA== - dependencies: - d3-array "^3.2.2" - d3-color "^3.1.0" - d3-geo "^3.1.0" - vega-dataflow "^5.7.5" - vega-expression "^5.1.0" - vega-scale "^7.3.0" - vega-scenegraph "^4.10.2" - vega-selections "^5.4.1" - vega-statistics "^1.8.1" - vega-time "^2.1.1" - vega-util "^1.17.1" - -vega-geo@~4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/vega-geo/-/vega-geo-4.4.1.tgz#3850232bf28c98fab5e26c5fb401acb6fb37b5e5" - integrity sha512-s4WeZAL5M3ZUV27/eqSD3v0FyJz3PlP31XNSLFy4AJXHxHUeXT3qLiDHoVQnW5Om+uBCPDtTT1ROx1smGIf2aA== - dependencies: - d3-array "^3.2.2" - d3-color "^3.1.0" - d3-geo "^3.1.0" - vega-canvas "^1.2.7" - vega-dataflow "^5.7.5" - vega-projection "^1.6.0" - vega-statistics "^1.8.1" - vega-util "^1.17.1" - -vega-hierarchy@~4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/vega-hierarchy/-/vega-hierarchy-4.1.1.tgz#897974a477dfa70cc0d4efab9465b6cc79a9071f" - integrity sha512-h5mbrDtPKHBBQ9TYbvEb/bCqmGTlUX97+4CENkyH21tJs7naza319B15KRK0NWOHuhbGhFmF8T0696tg+2c8XQ== - dependencies: - d3-hierarchy "^3.1.2" - vega-dataflow "^5.7.5" - vega-util "^1.17.1" - -vega-label@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/vega-label/-/vega-label-1.2.1.tgz#ea45fa5a407991c44edfea9c4ca40874d544a3db" - integrity sha512-n/ackJ5lc0Xs9PInCaGumYn2awomPjJ87EMVT47xNgk2bHmJoZV1Ve/1PUM6Eh/KauY211wPMrNp/9Im+7Ripg== - dependencies: - vega-canvas "^1.2.6" - vega-dataflow "^5.7.3" - vega-scenegraph "^4.9.2" - vega-util "^1.15.2" - -vega-lite@^5.1.0: - version "5.14.1" - resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.14.1.tgz#02177cb04af85c7011ab302a441d17e0bb6ac810" - integrity sha512-VFvi0QtUoLQqwfAXTGjo0Acw/OTjiK3zOrcO/HyksGnnNDBHWM1GTcFryiWZYoAi99ehvv7tI/q94O46+fGRSQ== - dependencies: - "@types/clone" "~2.1.1" - clone "~2.1.2" - fast-deep-equal "~3.1.3" - fast-json-stable-stringify "~2.1.0" - json-stringify-pretty-compact "~3.0.0" - tslib "~2.5.0" - vega-event-selector "~3.0.1" - vega-expression "~5.1.0" - vega-util "~1.17.2" - yargs "~17.7.2" - -vega-loader@^4.5.1, vega-loader@~4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/vega-loader/-/vega-loader-4.5.1.tgz#b85262b3cb8376487db0c014a8a13c3a5e6d52ad" - integrity sha512-qy5x32SaT0YkEujQM2yKqvLGV9XWQ2aEDSugBFTdYzu/1u4bxdUSRDREOlrJ9Km3RWIOgFiCkobPmFxo47SKuA== - dependencies: - d3-dsv "^3.0.1" - node-fetch "^2.6.7" - topojson-client "^3.1.0" - vega-format "^1.1.1" - vega-util "^1.17.1" - -vega-parser@~6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/vega-parser/-/vega-parser-6.2.0.tgz#c982aff0a6409486cbbe743a5799412b8b897654" - integrity sha512-as+QnX8Qxe9q51L1C2sVBd+YYYctP848+zEvkBT2jlI2g30aZ6Uv7sKsq7QTL6DUbhXQKR0XQtzlanckSFdaOQ== - dependencies: - vega-dataflow "^5.7.5" - vega-event-selector "^3.0.1" - vega-functions "^5.13.1" - vega-scale "^7.3.0" - vega-util "^1.17.1" - -vega-projection@^1.6.0, vega-projection@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/vega-projection/-/vega-projection-1.6.0.tgz#921acd3220e7d9d04ccd5ce0109433afb3236966" - integrity sha512-LGUaO/kpOEYuTlul+x+lBzyuL9qmMwP1yShdUWYLW+zXoeyGbs5OZW+NbPPwLYqJr5lpXDr/vGztFuA/6g2xvQ== - dependencies: - d3-geo "^3.1.0" - d3-geo-projection "^4.0.0" - vega-scale "^7.3.0" - -vega-regression@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vega-regression/-/vega-regression-1.2.0.tgz#12e9df88cf49994ac1a1799f64fb9c118a77a5e0" - integrity sha512-6TZoPlhV/280VbxACjRKqlE0Nv48z5g4CSNf1FmGGTWS1rQtElPTranSoVW4d7ET5eVQ6f9QLxNAiALptvEq+g== - dependencies: - d3-array "^3.2.2" - vega-dataflow "^5.7.3" - vega-statistics "^1.9.0" - vega-util "^1.15.2" - -vega-runtime@^6.1.4, vega-runtime@~6.1.4: - version "6.1.4" - resolved "https://registry.yarnpkg.com/vega-runtime/-/vega-runtime-6.1.4.tgz#98b67160cea9554e690bfd44719f9d17f90c4220" - integrity sha512-0dDYXyFLQcxPQ2OQU0WuBVYLRZnm+/CwVu6i6N4idS7R9VXIX5581EkCh3pZ20pQ/+oaA7oJ0pR9rJgJ6rukRQ== - dependencies: - vega-dataflow "^5.7.5" - vega-util "^1.17.1" - -vega-scale@^7.3.0, vega-scale@~7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/vega-scale/-/vega-scale-7.3.0.tgz#02b83435a892c6d91a87ee7d3d350fac987f464b" - integrity sha512-pMOAI2h+e1z7lsqKG+gMfR6NKN2sTcyjZbdJwntooW0uFHwjLGjMSY7kSd3nSEquF0HQ8qF7zR6gs1eRwlGimw== - dependencies: - d3-array "^3.2.2" - d3-interpolate "^3.0.1" - d3-scale "^4.0.2" - vega-time "^2.1.1" - vega-util "^1.17.1" - -vega-scenegraph@^4.10.2, vega-scenegraph@^4.9.2, vega-scenegraph@~4.10.2: - version "4.10.2" - resolved "https://registry.yarnpkg.com/vega-scenegraph/-/vega-scenegraph-4.10.2.tgz#3ae9ad8e99bbf75e2a4f3ebf2c1f9dee7562d245" - integrity sha512-R8m6voDZO5+etwNMcXf45afVM3XAtokMqxuDyddRl9l1YqSJfS+3u8hpolJ50c2q6ZN20BQiJwKT1o0bB7vKkA== - dependencies: - d3-path "^3.1.0" - d3-shape "^3.2.0" - vega-canvas "^1.2.7" - vega-loader "^4.5.1" - vega-scale "^7.3.0" - vega-util "^1.17.1" - -vega-selections@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/vega-selections/-/vega-selections-5.4.1.tgz#3233acb920703bfc323df8b960aa52e55ac08c70" - integrity sha512-EtYc4DvA+wXqBg9tq+kDomSoVUPCmQfS7hUxy2qskXEed79YTimt3Hcl1e1fW226I4AVDBEqTTKebmKMzbSgAA== - dependencies: - d3-array "3.2.2" - vega-expression "^5.0.1" - vega-util "^1.17.1" - -vega-statistics@^1.7.9, vega-statistics@^1.8.1, vega-statistics@^1.9.0, vega-statistics@~1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/vega-statistics/-/vega-statistics-1.9.0.tgz#7d6139cea496b22d60decfa6abd73346f70206f9" - integrity sha512-GAqS7mkatpXcMCQKWtFu1eMUKLUymjInU0O8kXshWaQrVWjPIO2lllZ1VNhdgE0qGj4oOIRRS11kzuijLshGXQ== - dependencies: - d3-array "^3.2.2" - -vega-time@^2.1.1, vega-time@~2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/vega-time/-/vega-time-2.1.1.tgz#0f1fb4e220dd5ed57401b58fb2293241f049ada0" - integrity sha512-z1qbgyX0Af2kQSGFbApwBbX2meenGvsoX8Nga8uyWN8VIbiySo/xqizz1KrP6NbB6R+x5egKmkjdnyNThPeEWA== - dependencies: - d3-array "^3.2.2" - d3-time "^3.1.0" - vega-util "^1.17.1" - -vega-transforms@~4.10.2: - version "4.10.2" - resolved "https://registry.yarnpkg.com/vega-transforms/-/vega-transforms-4.10.2.tgz#3a5ff3e92d8b0ee86868aed88e57b847b459d64e" - integrity sha512-sJELfEuYQ238PRG+GOqQch8D69RYnJevYSGLsRGQD2LxNz3j+GlUX6Pid+gUEH5HJy22Q5L0vsTl2ZNhIr4teQ== - dependencies: - d3-array "^3.2.2" - vega-dataflow "^5.7.5" - vega-statistics "^1.8.1" - vega-time "^2.1.1" - vega-util "^1.17.1" - -vega-typings@~0.24.0: - version "0.24.2" - resolved "https://registry.yarnpkg.com/vega-typings/-/vega-typings-0.24.2.tgz#7fa93e1ecccf2ea1e711024ef45aa3ef84b9ad1c" - integrity sha512-fW02GElYoqweCCaPqH6iH44UZnzXiX9kbm1qyecjU3k5s0vtufLI7Yuz/a/uL37mEAqTMQplBBAlk0T9e2e1Dw== - dependencies: - "@types/geojson" "7946.0.4" - vega-event-selector "^3.0.1" - vega-expression "^5.0.1" - vega-util "^1.17.1" - -vega-util@^1.15.2, vega-util@^1.17.1, vega-util@~1.17.2: - version "1.17.2" - resolved "https://registry.yarnpkg.com/vega-util/-/vega-util-1.17.2.tgz#f69aa09fd5d6110c19c4a0f0af9e35945b99987d" - integrity sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw== - -vega-view-transforms@~4.5.9: - version "4.5.9" - resolved "https://registry.yarnpkg.com/vega-view-transforms/-/vega-view-transforms-4.5.9.tgz#5f109555c08ee9ac23ff9183d578eb9cbac6fe61" - integrity sha512-NxEq4ZD4QwWGRrl2yDLnBRXM9FgCI+vvYb3ZC2+nVDtkUxOlEIKZsMMw31op5GZpfClWLbjCT3mVvzO2xaTF+g== - dependencies: - vega-dataflow "^5.7.5" - vega-scenegraph "^4.10.2" - vega-util "^1.17.1" - -vega-view@~5.11.1: - version "5.11.1" - resolved "https://registry.yarnpkg.com/vega-view/-/vega-view-5.11.1.tgz#a703d7d6344489c6a6e9e9d9c7a732519bf4432c" - integrity sha512-RoWxuoEMI7xVQJhPqNeLEHCezudsf3QkVMhH5tCovBqwBADQGqq9iWyax3ZzdyX1+P3eBgm7cnLvpqtN2hU8kA== - dependencies: - d3-array "^3.2.2" - d3-timer "^3.0.1" - vega-dataflow "^5.7.5" - vega-format "^1.1.1" - vega-functions "^5.13.1" - vega-runtime "^6.1.4" - vega-scenegraph "^4.10.2" - vega-util "^1.17.1" - -vega-voronoi@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/vega-voronoi/-/vega-voronoi-4.2.1.tgz#521a22d3d4c545fe1d5eea19eac0fd3ac5e58b1b" - integrity sha512-zzi+fxU/SBad4irdLLsG3yhZgXWZezraGYVQfZFWe8kl7W/EHUk+Eqk/eetn4bDeJ6ltQskX+UXH3OP5Vh0Q0Q== - dependencies: - d3-delaunay "^6.0.2" - vega-dataflow "^5.7.5" - vega-util "^1.17.1" - -vega-wordcloud@~4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/vega-wordcloud/-/vega-wordcloud-4.1.4.tgz#38584cf47ef52325d6a8dc38908b5d2378cc6e62" - integrity sha512-oeZLlnjiusLAU5vhk0IIdT5QEiJE0x6cYoGNq1th+EbwgQp153t4r026fcib9oq15glHFOzf81a8hHXHSJm1Jw== - dependencies: - vega-canvas "^1.2.7" - vega-dataflow "^5.7.5" - vega-scale "^7.3.0" - vega-statistics "^1.8.1" - vega-util "^1.17.1" - -vega@^5.20.0: - version "5.25.0" - resolved "https://registry.yarnpkg.com/vega/-/vega-5.25.0.tgz#086a799dfcd6958b6ca8eb41c92673ea591db323" - integrity sha512-lr+uj0mhYlSN3JOKbMNp1RzZBenWp9DxJ7kR3lha58AFNCzzds7pmFa7yXPbtbaGhB7Buh/t6n+Bzk3Y0VnF5g== - dependencies: - vega-crossfilter "~4.1.1" - vega-dataflow "~5.7.5" - vega-encode "~4.9.2" - vega-event-selector "~3.0.1" - vega-expression "~5.1.0" - vega-force "~4.2.0" - vega-format "~1.1.1" - vega-functions "~5.13.2" - vega-geo "~4.4.1" - vega-hierarchy "~4.1.1" - vega-label "~1.2.1" - vega-loader "~4.5.1" - vega-parser "~6.2.0" - vega-projection "~1.6.0" - vega-regression "~1.2.0" - vega-runtime "~6.1.4" - vega-scale "~7.3.0" - vega-scenegraph "~4.10.2" - vega-statistics "~1.9.0" - vega-time "~2.1.1" - vega-transforms "~4.10.2" - vega-typings "~0.24.0" - vega-util "~1.17.2" - vega-view "~5.11.1" - vega-view-transforms "~4.5.9" - vega-voronoi "~4.2.1" - vega-wordcloud "~4.1.4" - -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, walker@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -warning@^4.0.2, warning@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -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-cli@^4.1.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" - integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.2.0" - "@webpack-cli/info" "^1.5.0" - "@webpack-cli/serve" "^1.7.0" - colorette "^2.0.14" - commander "^7.0.0" - cross-spawn "^7.0.3" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - webpack-merge "^5.7.3" - -webpack-merge@^5.1.2, webpack-merge@^5.7.3: - version "5.9.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" - integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-sources@^1.4.3: - 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-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.41.1: - version "5.88.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" - integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -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 sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^8.0.0, whatwg-url@^8.5.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.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - -which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - 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" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -worker-loader@^3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-3.0.8.tgz#5fc5cda4a3d3163d9c274a4e3a811ce8b60dbb37" - integrity sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.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" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -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@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -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" - -write-file-atomic@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - -ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -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== - -xml@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" - integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== - -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.1, xtend@^4.0.2, xtend@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -xterm-addon-fit@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz#2d51b983b786a97dcd6cde805e700c7f913bc596" - integrity sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ== - -xterm-addon-web-links@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/xterm-addon-web-links/-/xterm-addon-web-links-0.6.0.tgz#0296cb6c99588847894670d998c9ea6a6aeb26ee" - integrity sha512-H6XzjWWZu8FBo+fnYpxdPk9w5M6drbsvwPEJZGRS38MihiQaVFpKlCMKdfRgDbKGE530tw1yH54rhpZfHgt2/A== - -xterm@~4.19.0: - version "4.19.0" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.19.0.tgz#c0f9d09cd61de1d658f43ca75f992197add9ef6d" - integrity sha512-c3Cp4eOVsYY5Q839dR5IejghRPpxciGmLWWaP9g+ppfMeBChMeLa1DCA+pmX/jyDZ+zxFOmlJL/82qVdayVoGQ== - -y-codemirror@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/y-codemirror/-/y-codemirror-3.0.1.tgz#d8a4e43cf46b5b557e0f03b7bbb65773ff436278" - integrity sha512-TsLSoouAZxkxOKbmTj7qdwZNS0lZMVqIdp7/j9EgUUqYj0remZYDGl6VBABrmp9UX1QvX6RoXXqzbNhftgfCbA== - dependencies: - lib0 "^0.2.42" - -y-leveldb@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/y-leveldb/-/y-leveldb-0.1.2.tgz#43f6c5004b6891b57926d8a1e0eb0c883003e34b" - integrity sha512-6ulEn5AXfXJYi89rXPEg2mMHAyyw8+ZfeMMdOtBbV8FJpQ1NOrcgi6DTAcXof0dap84NjHPT2+9d0rb6cFsjEg== - dependencies: - level "^6.0.1" - lib0 "^0.2.31" - -y-protocols@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/y-protocols/-/y-protocols-1.0.5.tgz#91d574250060b29fcac8f8eb5e276fbad594245e" - integrity sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A== - dependencies: - lib0 "^0.2.42" - -y-websocket@^1.4.6: - version "1.5.0" - resolved "https://registry.yarnpkg.com/y-websocket/-/y-websocket-1.5.0.tgz#3c13ed205f1553185e1d144eac94150b5b5d55d6" - integrity sha512-A8AO6XtnQlYwWFytWdkDCeXg4l8ghRTIw5h2YUgUYDmEC9ugWGIwYNW80yadhSFAF7CvuWTEkQNEpevnH6EiZw== - dependencies: - lib0 "^0.2.52" - lodash.debounce "^4.0.8" - y-protocols "^1.0.5" - optionalDependencies: - ws "^6.2.1" - y-leveldb "^0.1.0" - -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.2.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== - -yargs-parser@20.x, yargs-parser@^20.2.9: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -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@^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-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - integrity sha512-CswCfdOgCr4MMsT1GzbEJ7Z2uYudWyrGX8Bgh/0eyCzj/DXWdKq6a/ADufkzI1WAOIW6jYaXJvRyLhDO0kfqBw== - dependencies: - camelcase "^4.1.0" - -yargs@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" - integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - -yargs@^15.0.1, yargs@^15.4.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.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - 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" - -yarn-dedupe@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/yarn-dedupe/-/yarn-dedupe-0.2.3.tgz#7ae54183807b9f4e2c13bdbbbb3c7c974de28ccf" - integrity sha512-LUuIv5xBtnvsTiKlfBT4cqZGw/Kyx0cyr2+20ym2fLDT+I9PMEYr5yotFF4QlGiy8HQ9HdYlueegs9hH8jFhrg== - dependencies: - "@yarnpkg/lockfile" "^1.0.0" - semver "^5.5.0" - yargs "^11.0.0" - -yjs@^13.5.40: - version "13.5.51" - resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.5.51.tgz#afd5a26a230498c3b4bf8fee9c8dbeea71ef7e5c" - integrity sha512-F1Nb3z3TdandD80IAeQqgqy/2n9AhDLcXoBhZvCUX1dNVe0ef7fIwi6MjSYaGAYF2Ev8VcLcsGnmuGGOl7AWbw== - dependencies: - lib0 "^0.2.72" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" + dependencies: + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" + dependencies: + "@babel/highlight": ^7.22.13 + chalk: ^2.4.2 + checksum: 22e342c8077c8b77eeb11f554ecca2ba14153f707b85294fcf6070b6f6150aae88a7b7436dd88d8c9289970585f3fe5b9b941c5aa3aa26a6d5a8ef3f292da058 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/compat-data@npm:7.22.20" + checksum: efedd1d18878c10fde95e4d82b1236a9aba41395ef798cbb651f58dbf5632dbff475736c507b8d13d4c8f44809d41c0eb2ef0d694283af9ba5dd8339b6dab451 + languageName: node + linkType: hard + +"@babel/core@npm:^7.0.0, @babel/core@npm:^7.10.2, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.23.0 + resolution: "@babel/core@npm:7.23.0" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helpers": ^7.23.0 + "@babel/parser": ^7.23.0 + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: cebd9b48dbc970a7548522f207f245c69567e5ea17ebb1a4e4de563823cf20a01177fe8d2fe19b6e1461361f92fa169fd0b29f8ee9d44eeec84842be1feee5f2 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": + version: 7.23.0 + resolution: "@babel/generator@npm:7.23.0" + dependencies: + "@babel/types": ^7.23.0 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: 8efe24adad34300f1f8ea2add420b28171a646edc70f2a1b3e1683842f23b8b7ffa7e35ef0119294e1901f45bfea5b3dc70abe1f10a1917ccdfb41bed69be5f1 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d + languageName: node + linkType: hard + +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: d753acac62399fc6dd354cf1b9441bde0c331c2fe792a4c14904c5e5eafc3cac79478f6aa038e8a51c1148b0af6710a2e619855e4b5d54497ac972eaffed5884 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6": + version: 7.22.15 + resolution: "@babel/helper-compilation-targets@npm:7.22.15" + dependencies: + "@babel/compat-data": ^7.22.9 + "@babel/helper-validator-option": ^7.22.15 + browserslist: ^4.21.9 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: ce85196769e091ae54dd39e4a80c2a9df1793da8588e335c383d536d54f06baf648d0a08fc873044f226398c4ded15c4ae9120ee18e7dfd7c639a68e3cdc9980 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.22.11, @babel/helper-create-class-features-plugin@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/helper-create-class-features-plugin@npm:7.22.15" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-member-expression-to-functions": ^7.22.15 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 52c500d8d164abb3a360b1b7c4b8fff77bc4a5920d3a2b41ae6e1d30617b0dc0b972c1f5db35b1752007e04a748908b4a99bc872b73549ae837e87dcdde005a3 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + regexpu-core: ^5.3.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 94932145beeb1f91856be25fea8de30b4b81b63fbc7c5a207ed97a5ddc34cd1e9b04041ed28bd24ec09cdcfbb62e8d66f820e4fe864672afe0aa2f357c784e11 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.4.2": + version: 0.4.2 + resolution: "@babel/helper-define-polyfill-provider@npm:0.4.2" + dependencies: + "@babel/helper-compilation-targets": ^7.22.6 + "@babel/helper-plugin-utils": ^7.22.5 + debug: ^4.1.1 + lodash.debounce: ^4.0.8 + resolve: ^1.14.2 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 1f6dec0c5d0876d278fe15b71238eccc5f74c4e2efa2c78aaafa8bc2cc96336b8e68d94cd1a78497356c96e8b91b8c1f4452179820624d1702aee2f9832e6569 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.20, @babel/helper-environment-visitor@npm:^7.22.5": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" + dependencies: + "@babel/types": ^7.23.0 + checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/helper-module-imports@npm:7.22.15" + dependencies: + "@babel/types": ^7.22.15 + checksum: ecd7e457df0a46f889228f943ef9b4a47d485d82e030676767e6a2fdcbdaa63594d8124d4b55fd160b41c201025aec01fc27580352b1c87a37c9c6f33d116702 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-module-transforms@npm:7.23.0" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-validator-identifier": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6e2afffb058cf3f8ce92f5116f710dda4341c81cfcd872f9a0197ea594f7ce0ab3cb940b0590af2fe99e60d2e5448bfba6bca8156ed70a2ed4be2adc8586c891 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.22.5 + resolution: "@babel/helper-plugin-utils@npm:7.22.5" + checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.22.5, @babel/helper-remap-async-to-generator@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-wrap-function": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2fe6300a6f1b58211dffa0aed1b45d4958506d096543663dba83bd9251fe8d670fa909143a65b45e72acb49e7e20fbdb73eae315d9ddaced467948c3329986e7 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/helper-replace-supers@npm:7.22.20" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-member-expression-to-functions": ^7.22.15 + "@babel/helper-optimise-call-expression": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a0008332e24daedea2e9498733e3c39b389d6d4512637e000f96f62b797e702ee24a407ccbcd7a236a551590a38f31282829a8ef35c50a3c0457d88218cae639 + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" + dependencies: + "@babel/types": ^7.22.5 + checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-validator-option@npm:7.22.15" + checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-wrap-function@npm:7.22.20" + dependencies: + "@babel/helper-function-name": ^7.22.5 + "@babel/template": ^7.22.15 + "@babel/types": ^7.22.19 + checksum: 221ed9b5572612aeb571e4ce6a256f2dee85b3c9536f1dd5e611b0255e5f59a3d0ec392d8d46d4152149156a8109f92f20379b1d6d36abb613176e0e33f05fca + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.23.0": + version: 7.23.1 + resolution: "@babel/helpers@npm:7.23.1" + dependencies: + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + checksum: acfc345102045c24ea2a4d60e00dcf8220e215af3add4520e2167700661338e6a80bd56baf44bb764af05ec6621101c9afc315dc107e18c61fa6da8acbdbb893 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.22.13": + version: 7.22.20 + resolution: "@babel/highlight@npm:7.22.20" + dependencies: + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: 84bd034dca309a5e680083cd827a766780ca63cef37308404f17653d32366ea76262bd2364b2d38776232f2d01b649f26721417d507e8b4b6da3e4e739f6d134 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" + bin: + parser: ./bin/babel-parser.js + checksum: 453fdf8b9e2c2b7d7b02139e0ce003d1af21947bbc03eb350fb248ee335c9b85e4ab41697ddbdd97079698de825a265e45a0846bb2ed47a2c7c1df833f42a354 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.15" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 8910ca21a7ec7c06f7b247d4b86c97c5aa15ef321518f44f6f490c5912fdf82c605aaa02b90892e375d82ccbedeadfdeadd922c1b836c9dd4c596871bf654753 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.15" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-transform-optional-chaining": ^7.22.15 + peerDependencies: + "@babel/core": ^7.13.0 + checksum: fbefedc0da014c37f1a50a8094ce7dbbf2181ae93243f23d6ecba2499b5b20196c2124d6a4dfe3e9e0125798e80593103e456352a4beb4e5c6f7c75efb80fdac + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d97745d098b835d55033ff3a7fb2b895b9c5295b08a5759e4f20df325aa385a3e0bc9bd5ad8f2ec554a44d4e6525acfc257b8c5848a1345cb40f26a30e277e91 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 + languageName: node + linkType: hard + +"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2b8b5572db04a7bef1e6cd20debf447e4eef7cb012616f5eceb8fa3e23ce469b8f76ee74fd6d1e158ba17a8f58b0aec579d092fb67c5a30e83ccfbc5754916c1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 197b3c5ea2a9649347f033342cb222ab47f4645633695205c0250c6bf2af29e643753b8bb24a2db39948bef08e7c540babfd365591eb57fc110cb30b425ffc47 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 35abb6c57062802c7ce8bd96b2ef2883e3124370c688bbd67609f7d2453802fb73944df8808f893b6c67de978eb2bcf87bbfe325e46d6f39b5fcb09ece11d01a + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.15" + dependencies: + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-remap-async-to-generator": ^7.22.9 + "@babel/plugin-syntax-async-generators": ^7.8.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fad98786b446ce63bde0d14a221e2617eef5a7bbca62b49d96f16ab5e1694521234cfba6145b830fbf9af16d60a8a3dbf148e8694830bd91796fe333b0599e73 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5" + dependencies: + "@babel/helper-module-imports": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-remap-async-to-generator": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b95f23f99dcb379a9f0a1c2a3bbea3f8dc0e1b16dc1ac8b484fe378370169290a7a63d520959a9ba1232837cf74a80e23f6facbe14fd42a3cda6d3c2d7168e62 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 416b1341858e8ca4e524dee66044735956ced5f478b2c3b9bc11ec2285b0c25d7dbb96d79887169eb938084c95d0a89338c8b2fe70d473bd9dc92e5d9db1732c + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.23.0" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0cfe925cc3b5a3ad407e2253fab3ceeaa117a4b291c9cb245578880872999bca91bd83ffa0128ae9ca356330702e1ef1dcb26804f28d2cef678239caf629f73e + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-class-properties@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b830152dfc2ff2f647f0abe76e6251babdfbef54d18c4b2c73a6bf76b1a00050a5d998dac80dc901a48514e95604324943a9dd39317073fe0928b559e0e0c579 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-class-static-block@npm:7.22.11" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.11 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 69f040506fad66f1c6918d288d0e0edbc5c8a07c8b4462c1184ad2f9f08995d68b057126c213871c0853ae0c72afc60ec87492049dfacb20902e32346a448bcb + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-classes@npm:7.22.15" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.9 + "@babel/helper-split-export-declaration": ^7.22.6 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d3f4d0c107dd8a3557ea3575cc777fab27efa92958b41e4a9822f7499725c1f554beae58855de16ddec0a7b694e45f59a26cea8fbde4275563f72f09c6e039a0 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/template": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c2a77a0f94ec71efbc569109ec14ea2aa925b333289272ced8b33c6108bdbb02caf01830ffc7e49486b62dec51911924d13f3a76f1149f40daace1898009e131 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/plugin-transform-destructuring@npm:7.23.0" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cd6dd454ccc2766be551e4f8a04b1acc2aa539fa19e5c7501c56cc2f8cc921dd41a7ffb78455b4c4b2f954fcab8ca4561ba7c9c7bd5af9f19465243603d18cc3 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 409b658d11e3082c8f69e9cdef2d96e4d6d11256f005772425fb230cc48fd05945edbfbcb709dab293a1a2f01f9c8a5bb7b4131e632b23264039d9f95864b453 + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb1280fbabaab6fab2ede585df34900712698210a3bd413f4df5bae6d8c24be36b496c92722ae676a7a67d060a4624f4d6c23b923485f906bfba8773c69f55b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 78fc9c532210bf9e8f231747f542318568ac360ee6c27e80853962c984283c73da3f8f8aebe83c2096090a435b356b092ed85de617a156cbe0729d847632be45 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f2d660c1b1d51ad5fec1cd5ad426a52187204068c4158f8c4aa977b31535c61b66898d532603eef21c15756827be8277f724c869b888d560f26d7fe848bb5eae + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 73af5883a321ed56a4bfd43c8a7de0164faebe619287706896fc6ee2f7a4e69042adaa1338c0b8b4bdb9f7e5fdceb016fb1d40694cb43ca3b8827429e8aac4bf + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-for-of@npm:7.22.15" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f395ae7bce31e14961460f56cf751b5d6e37dd27d7df5b1f4e49fec1c11b6f9cf71991c7ffbe6549878591e87df0d66af798cf26edfa4bfa6b4c3dba1fb2f73a + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-function-name@npm:7.22.5" + dependencies: + "@babel/helper-compilation-targets": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cff3b876357999cb8ae30e439c3ec6b0491a53b0aa6f722920a4675a6dd5b53af97a833051df4b34791fe5b3dd326ccf769d5c8e45b322aa50ee11a660b17845 + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-json-strings@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-json-strings": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 50665e5979e66358c50e90a26db53c55917f78175127ac2fa05c7888d156d418ffb930ec0a109353db0a7c5f57c756ce01bfc9825d24cbfd2b3ec453f2ed8cba + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec37cc2ffb32667af935ab32fe28f00920ec8a1eb999aa6dc6602f2bebd8ba205a558aeedcdccdebf334381d5c57106c61f52332045730393e73410892a9735b + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c664e9798e85afa7f92f07b867682dee7392046181d82f5d21bae6f2ca26dfe9c8375cdc52b7483c3fc09a983c1989f60eff9fbc4f373b0c0a74090553d05739 + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec4b0e07915ddd4fda0142fd104ee61015c208608a84cfa13643a95d18760b1dc1ceb6c6e0548898b8c49e5959a994e46367260176dbabc4467f729b21868504 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-amd@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7da4c4ebbbcf7d182abb59b2046b22d86eee340caf8a22a39ef6a727da2d8acfec1f714fcdcd5054110b280e4934f735e80a6848d192b6834c5d4459a014f04d + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.0" + dependencies: + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7fb25997194053e167c4207c319ff05362392da841bd9f42ddb3caf9c8798a5d203bd926d23ddf5830fdf05eddc82c2810f40d1287e3a4f80b07eff13d1024b5 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.22.11": + version: 7.23.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.0" + dependencies: + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2d481458b22605046badea2317d5cc5c94ac3031c2293e34c96f02063f5b02af0979c4da6a8fbc67cc249541575dc9c6d710db6b919ede70b7337a22d9fd57a7 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-umd@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 46622834c54c551b231963b867adbc80854881b3e516ff29984a8da989bd81665bd70e8cba6710345248e97166689310f544aee1a5773e262845a8f1b3e5b8b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-new-target@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6b72112773487a881a1d6ffa680afde08bad699252020e86122180ee7a88854d5da3f15d9bca3331cf2e025df045604494a8208a2e63b486266b07c14e2ffbf3 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 167babecc8b8fe70796a7b7d34af667ebbf43da166c21689502e5e8cc93180b7a85979c77c9f64b7cce431b36718bd0a6df9e5e0ffea4ae22afb22cfef886372 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: af064d06a4a041767ec396a5f258103f64785df290e038bba9f0ef454e6c914f2ac45d862bbdad8fac2c7ad47fa4e95356f29053c60c100a0160b02a995fe2a3 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.15" + dependencies: + "@babel/compat-data": ^7.22.9 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.22.15 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 62197a6f12289c1c1bd57f3bed9f0f765ca32390bfe91e0b5561dd94dd9770f4480c4162dec98da094bc0ba99d2c2ebba68de47c019454041b0b7a68ba2ec66d + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-object-super@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b71887877d74cb64dbccb5c0324fa67e31171e6a5311991f626650e44a4083e5436a1eaa89da78c0474fb095d4ec322d63ee778b202d33aa2e4194e1ed8e62d7 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.11" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f17abd90e1de67c84d63afea29c8021c74abb2794d3a6eeafb0bbe7372d3db32aefca386e392116ec63884537a4a2815d090d26264d259bacc08f6e3ed05294c + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.0" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f702634f2b97e5260dbec0d4bde05ccb6f4d96d7bfa946481aeacfa205ca846cb6e096a38312f9d51fdbdac1f258f211138c5f7075952e46a5bf8574de6a1329 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/plugin-transform-parameters@npm:7.22.15" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 541188bb7d1876cad87687b5c7daf90f63d8208ae83df24acb1e2b05020ad1c78786b2723ca4054a83fcb74fb6509f30c4cacc5b538ee684224261ad5fb047c1 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-private-methods@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 321479b4fcb6d3b3ef622ab22fd24001e43d46e680e8e41324c033d5810c84646e470f81b44cbcbef5c22e99030784f7cac92f1829974da7a47a60a7139082c3 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.22.11": + version: 7.22.11 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.11" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-create-class-features-plugin": ^7.22.11 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4d029d84901e53c46dead7a46e2990a7bc62470f4e4ca58a0d063394f86652fd58fe4eea1eb941da3669cd536b559b9d058b342b59300026346b7a2a51badac8 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-property-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 796176a3176106f77fcb8cd04eb34a8475ce82d6d03a88db089531b8f0453a2fb8b0c6ec9a52c27948bc0ea478becec449893741fc546dfc3930ab927e3f9f2e + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/plugin-transform-regenerator@npm:7.22.10" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + regenerator-transform: ^0.15.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e13678d62d6fa96f11cb8b863f00e8693491e7adc88bfca3f2820f80cbac8336e7dec3a596eee6a1c4663b7ececc3564f2cd7fb44ed6d4ce84ac2bb7f39ecc6e + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3ffd7dbc425fe8132bfec118b9817572799cab1473113a635d25ab606c1f5a2341a636c04cf6b22df3813320365ed5a965b5eeb3192320a10e4cc2c137bd8bfc + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a5ac902c56ea8effa99f681340ee61bac21094588f7aef0bc01dff98246651702e677552fa6d10e548c4ac22a3ffad047dd2f8c8f0540b68316c2c203e56818b + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-spread@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5587f0deb60b3dfc9b274e269031cc45ec75facccf1933ea2ea71ced9fd3ce98ed91bb36d6cd26817c14474b90ed998c5078415f0eab531caf301496ce24c95c + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 63b2c575e3e7f96c32d52ed45ee098fb7d354b35c2223b8c8e76840b32cc529ee0c0ceb5742fd082e56e91e3d82842a367ce177e82b05039af3d602c9627a729 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-template-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 27e9bb030654cb425381c69754be4abe6a7c75b45cd7f962cd8d604b841b2f0fb7b024f2efc1c25cc53f5b16d79d5e8cfc47cacbdaa983895b3aeefa3e7e24ff + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 82a53a63ffc3010b689ca9a54e5f53b2718b9f4b4a9818f36f9b7dba234f38a01876680553d2716a645a61920b5e6e4aaf8d4a0064add379b27ca0b403049512 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.10" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 807f40ed1324c8cb107c45358f1903384ca3f0ef1d01c5a3c5c9b271c8d8eec66936a3dcc8d75ddfceea9421420368c2e77ae3adef0a50557e778dfe296bf382 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2495e5f663cb388e3d888b4ba3df419ac436a5012144ac170b622ddfc221f9ea9bdba839fa2bc0185cb776b578030666406452ec7791cbf0e7a3d4c88ae9574c + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6b5d1404c8c623b0ec9bd436c00d885a17d6a34f3f2597996343ddb9d94f6379705b21582dfd4cec2c47fd34068872e74ab6b9580116c0566b3f9447e2a7fa06 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c042070f980b139547f8b0179efbc049ac5930abec7fc26ed7a41d89a048d8ab17d362200e204b6f71c3c20d6991a0e74415e1a412a49adc8131c2a40c04822e + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.0.0, @babel/preset-env@npm:^7.10.2": + version: 7.22.20 + resolution: "@babel/preset-env@npm:7.22.20" + dependencies: + "@babel/compat-data": ^7.22.20 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-option": ^7.22.15 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.22.15 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.22.15 + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-import-assertions": ^7.22.5 + "@babel/plugin-syntax-import-attributes": ^7.22.5 + "@babel/plugin-syntax-import-meta": ^7.10.4 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@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-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.22.5 + "@babel/plugin-transform-async-generator-functions": ^7.22.15 + "@babel/plugin-transform-async-to-generator": ^7.22.5 + "@babel/plugin-transform-block-scoped-functions": ^7.22.5 + "@babel/plugin-transform-block-scoping": ^7.22.15 + "@babel/plugin-transform-class-properties": ^7.22.5 + "@babel/plugin-transform-class-static-block": ^7.22.11 + "@babel/plugin-transform-classes": ^7.22.15 + "@babel/plugin-transform-computed-properties": ^7.22.5 + "@babel/plugin-transform-destructuring": ^7.22.15 + "@babel/plugin-transform-dotall-regex": ^7.22.5 + "@babel/plugin-transform-duplicate-keys": ^7.22.5 + "@babel/plugin-transform-dynamic-import": ^7.22.11 + "@babel/plugin-transform-exponentiation-operator": ^7.22.5 + "@babel/plugin-transform-export-namespace-from": ^7.22.11 + "@babel/plugin-transform-for-of": ^7.22.15 + "@babel/plugin-transform-function-name": ^7.22.5 + "@babel/plugin-transform-json-strings": ^7.22.11 + "@babel/plugin-transform-literals": ^7.22.5 + "@babel/plugin-transform-logical-assignment-operators": ^7.22.11 + "@babel/plugin-transform-member-expression-literals": ^7.22.5 + "@babel/plugin-transform-modules-amd": ^7.22.5 + "@babel/plugin-transform-modules-commonjs": ^7.22.15 + "@babel/plugin-transform-modules-systemjs": ^7.22.11 + "@babel/plugin-transform-modules-umd": ^7.22.5 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5 + "@babel/plugin-transform-new-target": ^7.22.5 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.22.11 + "@babel/plugin-transform-numeric-separator": ^7.22.11 + "@babel/plugin-transform-object-rest-spread": ^7.22.15 + "@babel/plugin-transform-object-super": ^7.22.5 + "@babel/plugin-transform-optional-catch-binding": ^7.22.11 + "@babel/plugin-transform-optional-chaining": ^7.22.15 + "@babel/plugin-transform-parameters": ^7.22.15 + "@babel/plugin-transform-private-methods": ^7.22.5 + "@babel/plugin-transform-private-property-in-object": ^7.22.11 + "@babel/plugin-transform-property-literals": ^7.22.5 + "@babel/plugin-transform-regenerator": ^7.22.10 + "@babel/plugin-transform-reserved-words": ^7.22.5 + "@babel/plugin-transform-shorthand-properties": ^7.22.5 + "@babel/plugin-transform-spread": ^7.22.5 + "@babel/plugin-transform-sticky-regex": ^7.22.5 + "@babel/plugin-transform-template-literals": ^7.22.5 + "@babel/plugin-transform-typeof-symbol": ^7.22.5 + "@babel/plugin-transform-unicode-escapes": ^7.22.10 + "@babel/plugin-transform-unicode-property-regex": ^7.22.5 + "@babel/plugin-transform-unicode-regex": ^7.22.5 + "@babel/plugin-transform-unicode-sets-regex": ^7.22.5 + "@babel/preset-modules": 0.1.6-no-external-plugins + "@babel/types": ^7.22.19 + babel-plugin-polyfill-corejs2: ^0.4.5 + babel-plugin-polyfill-corejs3: ^0.8.3 + babel-plugin-polyfill-regenerator: ^0.5.2 + core-js-compat: ^3.31.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 99357a5cb30f53bacdc0d1cd6dff0f052ea6c2d1ba874d969bba69897ef716e87283e84a59dc52fb49aa31fd1b6f55ed756c64c04f5678380700239f6030b881 + languageName: node + linkType: hard + +"@babel/preset-modules@npm:0.1.6-no-external-plugins": + version: 0.1.6-no-external-plugins + resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@babel/types": ^7.4.4 + esutils: ^2.0.2 + peerDependencies: + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + checksum: 4855e799bc50f2449fb5210f78ea9e8fd46cf4f242243f1e2ed838e2bd702e25e73e822e7f8447722a5f4baa5e67a8f7a0e403f3e7ce04540ff743a9c411c375 + languageName: node + linkType: hard + +"@babel/regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "@babel/regjsgen@npm:0.8.0" + checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.23.1, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7": + version: 7.23.1 + resolution: "@babel/runtime@npm:7.23.1" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 0cd0d43e6e7dc7f9152fda8c8312b08321cda2f56ef53d6c22ebdd773abdc6f5d0a69008de90aa41908d00e2c1facb24715ff121274e689305c858355ff02c70 + languageName: node + linkType: hard + +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.3.3": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/parser": ^7.22.15 + "@babel/types": ^7.22.15 + checksum: 1f3e7dcd6c44f5904c184b3f7fe280394b191f2fed819919ffa1e529c259d5b197da8981b6ca491c235aee8dbad4a50b7e31304aa531271cb823a4a24a0dd8fd + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/traverse@npm:7.23.0" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.23.0 + "@babel/types": ^7.23.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 0b17fae53269e1af2cd3edba00892bc2975ad5df9eea7b84815dab07dfec2928c451066d51bc65b4be61d8499e77db7e547ce69ef2a7b0eca3f96269cb43a0b0 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" + dependencies: + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 + to-fast-properties: ^2.0.0 + checksum: 215fe04bd7feef79eeb4d33374b39909ce9cad1611c4135a4f7fdf41fe3280594105af6d7094354751514625ea92d0875aba355f53e86a92600f290e77b0e604 + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 + languageName: node + linkType: hard + +"@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.3.2, @codemirror/autocomplete@npm:^6.5.1, @codemirror/autocomplete@npm:^6.7.1": + version: 6.9.1 + resolution: "@codemirror/autocomplete@npm:6.9.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + peerDependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + checksum: 96dad7a12429bf61e6f1bf75da731bf0dcbfeb56c33400b60a0de22049226e0926a53a174e84701812a235f8f144595ce53f0928054481bdf9cdc2ed3b8be20f + languageName: node + linkType: hard + +"@codemirror/commands@npm:^6.2.3": + version: 6.3.0 + resolution: "@codemirror/commands@npm:6.3.0" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.1.0 + checksum: d6ade0ba7d4f80c2e44163935783d2f2f35c8b641a4b4f62452c0630211670abe5093786cf5a4af14147102d4284dae660a26f3ae58fd840e838685a81107d11 + languageName: node + linkType: hard + +"@codemirror/lang-cpp@npm:^6.0.2": + version: 6.0.2 + resolution: "@codemirror/lang-cpp@npm:6.0.2" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/cpp": ^1.0.0 + checksum: bb9eba482cca80037ce30c7b193cf45eff19ccbb773764fddf2071756468ecc25aa53c777c943635054f89095b0247b9b50c339e107e41e68d34d12a7295f9a9 + languageName: node + linkType: hard + +"@codemirror/lang-css@npm:^6.0.0, @codemirror/lang-css@npm:^6.1.1": + version: 6.2.1 + resolution: "@codemirror/lang-css@npm:6.2.1" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.2 + "@lezer/css": ^1.0.0 + checksum: 5a8457ee8a4310030a969f2d3128429f549c4dc9b7907ee8888b42119c80b65af99093801432efdf659b8ec36a147d2a947bc1ecbbf69a759395214e3f4834a8 + languageName: node + linkType: hard + +"@codemirror/lang-html@npm:^6.0.0, @codemirror/lang-html@npm:^6.4.3": + version: 6.4.6 + resolution: "@codemirror/lang-html@npm:6.4.6" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/lang-css": ^6.0.0 + "@codemirror/lang-javascript": ^6.0.0 + "@codemirror/language": ^6.4.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + "@lezer/css": ^1.1.0 + "@lezer/html": ^1.3.0 + checksum: 8f884f4423ffc783181ee933f7212ad4ece204695cf8af9535a593f95e901d36515a8561fc336a0fbcf5782369b9484eeb0d2cec2167622868238177c5e6eb36 + languageName: node + linkType: hard + +"@codemirror/lang-java@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-java@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/java": ^1.0.0 + checksum: 4679104683cbffcd224ac04c7e5d144b787494697b26470b07017259035b7bb3fa62609d9a61bfbc566f1756d9f972f9f26d96a3c1362dd48881c1172f9a914d + languageName: node + linkType: hard + +"@codemirror/lang-javascript@npm:^6.0.0, @codemirror/lang-javascript@npm:^6.1.7": + version: 6.2.1 + resolution: "@codemirror/lang-javascript@npm:6.2.1" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.6.0 + "@codemirror/lint": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + "@lezer/javascript": ^1.0.0 + checksum: 3df38c4cced06195283a9a2a9365aaa7c8c1b157852b331bc3a118403f774bbba57d2a392de52f5e28d2b344a323bc0146bcf7c8ef8be2473f167d815e4a37cd + languageName: node + linkType: hard + +"@codemirror/lang-json@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-json@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/json": ^1.0.0 + checksum: e9e87d50ff7b81bd56a6ab50740b1dd54e9a93f1be585e1d59d0642e2148842ea1528ac7b7221eb4ddc7fe84bbc28065144cc3ab86f6e06c6aeb2d4b4e62acf1 + languageName: node + linkType: hard + +"@codemirror/lang-markdown@npm:^6.1.1": + version: 6.2.1 + resolution: "@codemirror/lang-markdown@npm:6.2.1" + dependencies: + "@codemirror/autocomplete": ^6.7.1 + "@codemirror/lang-html": ^6.0.0 + "@codemirror/language": ^6.3.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/markdown": ^1.0.0 + checksum: ef3bdfd01e418efc7f7fdf0baa2e8e91875b37f870fcad98f846954763c7cc71bac95736591cd6c52b39cc380261d76ae7b37ca97ef1641c4c266476748046d3 + languageName: node + linkType: hard + +"@codemirror/lang-php@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-php@npm:6.0.1" + dependencies: + "@codemirror/lang-html": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/php": ^1.0.0 + checksum: c003a29a426486453fdfddbf7302982fa2aa7f059bf6f1ce4cbf08341b0162eee5e2f50e0d71c418dcd358491631780156d846fe352754d042576172c5d86721 + languageName: node + linkType: hard + +"@codemirror/lang-python@npm:^6.1.3": + version: 6.1.3 + resolution: "@codemirror/lang-python@npm:6.1.3" + dependencies: + "@codemirror/autocomplete": ^6.3.2 + "@codemirror/language": ^6.8.0 + "@lezer/python": ^1.1.4 + checksum: 65a0276a4503e4e3b70dd28d1c93ef472632b6d2c4bf3ae92d305d14ee8cf60b0bbbf62d5ceb51294de9598d9e2d42eafcde26f317ee7b90d0a11dfa863c1d1a + languageName: node + linkType: hard + +"@codemirror/lang-rust@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-rust@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/rust": ^1.0.0 + checksum: 8a439944cb22159b0b3465ca4fa4294c69843219d5d30e278ae6df8e48f30a7a9256129723c025ec9b5e694d31a3560fb004300b125ffcd81c22d13825845170 + languageName: node + linkType: hard + +"@codemirror/lang-sql@npm:^6.4.1": + version: 6.5.4 + resolution: "@codemirror/lang-sql@npm:6.5.4" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: face21b0231ac5a7981949b5bf6a99ed092d0d6f7eb83f35dcd31d56ecf07dafa19d21623e0bad36cec7a12e3149df7b45c3588aeee31eae41e9b05942c4fdd7 + languageName: node + linkType: hard + +"@codemirror/lang-wast@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-wast@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 600d98d3ea6a4e99292244ed707e39a2abd9f3abf62cfeff5c819a0cc0c7e86b8c5b91e91c1b7ea21233d9ea09c41abe61d8a40b2547bb5db74239c6df857934 + languageName: node + linkType: hard + +"@codemirror/lang-xml@npm:^6.0.2": + version: 6.0.2 + resolution: "@codemirror/lang-xml@npm:6.0.2" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.4.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/xml": ^1.0.0 + checksum: e156ecafaa87e9b6ef4ab6812ccd00d8f3c6cb81f232837636b36336d80513b61936dfee6f4f6800574f236208b61e95a2abcb997cdcd7366585a6b796e0e13b + languageName: node + linkType: hard + +"@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.3.0, @codemirror/language@npm:^6.4.0, @codemirror/language@npm:^6.6.0, @codemirror/language@npm:^6.8.0": + version: 6.9.1 + resolution: "@codemirror/language@npm:6.9.1" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.1.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + style-mod: ^4.0.0 + checksum: 62265f1042d2edfd3a091c408d9d0071f23889099b2f6ce8275fa910118bd2c45b8c4b29228c7be6e6d5f0e0812a522de902bc75ba8d8b2e62e42ade1692a49a + languageName: node + linkType: hard + +"@codemirror/legacy-modes@npm:^6.3.2": + version: 6.3.3 + resolution: "@codemirror/legacy-modes@npm:6.3.3" + dependencies: + "@codemirror/language": ^6.0.0 + checksum: 3cd32b0f011b0a193e0948e5901b625f38aa6d9a8b24344531d6e142eb6fbb3e6cb5969429102044f3d04fbe53c4deaebd9f659c05067a0b18d17766290c9e05 + languageName: node + linkType: hard + +"@codemirror/lint@npm:^6.0.0": + version: 6.4.2 + resolution: "@codemirror/lint@npm:6.4.2" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + crelt: ^1.0.5 + checksum: 5e699960c1b28dbaa584fe091a3201978907bf4b9e52810fb15d3ceaf310e38053435e0b594da0985266ae812039a5cd6c36023284a6f8568664bdca04db137f + languageName: node + linkType: hard + +"@codemirror/search@npm:^6.3.0": + version: 6.5.4 + resolution: "@codemirror/search@npm:6.5.4" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + crelt: ^1.0.5 + checksum: 32a68e40486730949ee79f54b9fcc6c744559aef188d3c5bf82881f62e5fc9468fa21cf227507638160043c797eb054205802a649cf4a2350928fc161d5aac40 + languageName: node + linkType: hard + +"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.4, @codemirror/state@npm:^6.2.0": + version: 6.2.1 + resolution: "@codemirror/state@npm:6.2.1" + checksum: d12a321d0471b264b9d3259042bff913a8b939e8d28d408ff452004538a71ca9d5329df3f8a1d8a9183f5b42a7ef5b200737bcab1065714f5ae8e0a5ba9d59d3 + languageName: node + linkType: hard + +"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.14.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.9.6": + version: 6.21.2 + resolution: "@codemirror/view@npm:6.21.2" + dependencies: + "@codemirror/state": ^6.1.4 + style-mod: ^4.1.0 + w3c-keyname: ^2.2.4 + checksum: d972a32f26882a1811ffab833f8705339cd4c1bfe56765ed6ecbc1d84466b71a728adb8f4b4fc566ca3bccee5aacd2585e79cb96a851dcd48777e2320dab1892 + languageName: node + linkType: hard + +"@csstools/css-parser-algorithms@npm:^2.3.0": + version: 2.3.0 + resolution: "@csstools/css-parser-algorithms@npm:2.3.0" + peerDependencies: + "@csstools/css-tokenizer": ^2.1.1 + checksum: 3be22a0cfcfe0dc4bb140e2f266590addf21c5052d9e69334da860b3839fbd4369c3d158cbc396032d5ed96d01d2b5d8ebdb5497f75c9830ed9ce99853e3f915 + languageName: node + linkType: hard + +"@csstools/css-tokenizer@npm:^2.1.1": + version: 2.1.1 + resolution: "@csstools/css-tokenizer@npm:2.1.1" + checksum: d6ac4b08d7fdfc146755542f00b208af7248efd6cf2eb0f0f7d2ba3583a81f08ed9be6047d78b046925708b5bd0886f487edeeee2f90f0f34030dcbef4122d0e + languageName: node + linkType: hard + +"@csstools/media-query-list-parser@npm:^2.1.2": + version: 2.1.2 + resolution: "@csstools/media-query-list-parser@npm:2.1.2" + peerDependencies: + "@csstools/css-parser-algorithms": ^2.3.0 + "@csstools/css-tokenizer": ^2.1.1 + checksum: 04936573ba837f14d7d637e172342c473665679c6497bbc0d548d93d08cb22e22151bb19e0e20422954c0b2aa50c3f38c9fc5f45c136e31bc863c656cb79df1b + languageName: node + linkType: hard + +"@csstools/selector-specificity@npm:^3.0.0": + version: 3.0.0 + resolution: "@csstools/selector-specificity@npm:3.0.0" + peerDependencies: + postcss-selector-parser: ^6.0.13 + checksum: 4a2dfe69998a499155d9dab4c2a0e7ae7594d8db98bb8a487d2d5347c0c501655051eb5eacad3fe323c86b0ba8212fe092c27fc883621e6ac2a27662edfc3528 + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:^0.5.0": + version: 0.5.7 + resolution: "@discoveryjs/json-ext@npm:0.5.7" + checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 + languageName: node + linkType: hard + +"@emotion/babel-plugin@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/babel-plugin@npm:11.11.0" + dependencies: + "@babel/helper-module-imports": ^7.16.7 + "@babel/runtime": ^7.18.3 + "@emotion/hash": ^0.9.1 + "@emotion/memoize": ^0.8.1 + "@emotion/serialize": ^1.1.2 + babel-plugin-macros: ^3.1.0 + convert-source-map: ^1.5.0 + escape-string-regexp: ^4.0.0 + find-root: ^1.1.0 + source-map: ^0.5.7 + stylis: 4.2.0 + checksum: 6b363edccc10290f7a23242c06f88e451b5feb2ab94152b18bb8883033db5934fb0e421e2d67d09907c13837c21218a3ac28c51707778a54d6cd3706c0c2f3f9 + languageName: node + linkType: hard + +"@emotion/cache@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/cache@npm:11.11.0" + dependencies: + "@emotion/memoize": ^0.8.1 + "@emotion/sheet": ^1.2.2 + "@emotion/utils": ^1.2.1 + "@emotion/weak-memoize": ^0.3.1 + stylis: 4.2.0 + checksum: 8eb1dc22beaa20c21a2e04c284d5a2630a018a9d51fb190e52de348c8d27f4e8ca4bbab003d68b4f6cd9cc1c569ca747a997797e0f76d6c734a660dc29decf08 + languageName: node + linkType: hard + +"@emotion/hash@npm:^0.9.1": + version: 0.9.1 + resolution: "@emotion/hash@npm:0.9.1" + checksum: 716e17e48bf9047bf9383982c071de49f2615310fb4e986738931776f5a823bc1f29c84501abe0d3df91a3803c80122d24e28b57351bca9e01356ebb33d89876 + languageName: node + linkType: hard + +"@emotion/is-prop-valid@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/is-prop-valid@npm:1.2.1" + dependencies: + "@emotion/memoize": ^0.8.1 + checksum: 8f42dc573a3fad79b021479becb639b8fe3b60bdd1081a775d32388bca418ee53074c7602a4c845c5f75fa6831eb1cbdc4d208cc0299f57014ed3a02abcad16a + languageName: node + linkType: hard + +"@emotion/memoize@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/memoize@npm:0.8.1" + checksum: a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0 + languageName: node + linkType: hard + +"@emotion/react@npm:^11.10.6": + version: 11.11.1 + resolution: "@emotion/react@npm:11.11.1" + dependencies: + "@babel/runtime": ^7.18.3 + "@emotion/babel-plugin": ^11.11.0 + "@emotion/cache": ^11.11.0 + "@emotion/serialize": ^1.1.2 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 + "@emotion/utils": ^1.2.1 + "@emotion/weak-memoize": ^0.3.1 + hoist-non-react-statics: ^3.3.1 + peerDependencies: + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: aec3c36650f5f0d3d4445ff44d73dd88712b1609645b6af3e6d08049cfbc51f1785fe13dea1a1d4ab1b0800d68f2339ab11e459687180362b1ef98863155aae5 + languageName: node + linkType: hard + +"@emotion/serialize@npm:^1.1.2": + version: 1.1.2 + resolution: "@emotion/serialize@npm:1.1.2" + dependencies: + "@emotion/hash": ^0.9.1 + "@emotion/memoize": ^0.8.1 + "@emotion/unitless": ^0.8.1 + "@emotion/utils": ^1.2.1 + csstype: ^3.0.2 + checksum: 413c352e657f1b5e27ea6437b3ef7dcc3860669b7ae17fd5c18bfbd44e033af1acc56b64d252284a813ca4f3b3e1b0841c42d3fb08e02d2df56fd3cd63d72986 + languageName: node + linkType: hard + +"@emotion/sheet@npm:^1.2.2": + version: 1.2.2 + resolution: "@emotion/sheet@npm:1.2.2" + checksum: d973273c9c15f1c291ca2269728bf044bd3e92a67bca87943fa9ec6c3cd2b034f9a6bfe95ef1b5d983351d128c75b547b43ff196a00a3875f7e1d269793cecfe + languageName: node + linkType: hard + +"@emotion/styled@npm:^11.10.6": + version: 11.11.0 + resolution: "@emotion/styled@npm:11.11.0" + dependencies: + "@babel/runtime": ^7.18.3 + "@emotion/babel-plugin": ^11.11.0 + "@emotion/is-prop-valid": ^1.2.1 + "@emotion/serialize": ^1.1.2 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 + "@emotion/utils": ^1.2.1 + peerDependencies: + "@emotion/react": ^11.0.0-rc.0 + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 904f641aad3892c65d7d6c0808b036dae1e6d6dad4861c1c7dc0baa59977047c6cad220691206eba7b4059f1a1c6e6c1ef4ebb8c829089e280fa0f2164a01e6b + languageName: node + linkType: hard + +"@emotion/unitless@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/unitless@npm:0.8.1" + checksum: 385e21d184d27853bb350999471f00e1429fa4e83182f46cd2c164985999d9b46d558dc8b9cc89975cb337831ce50c31ac2f33b15502e85c299892e67e7b4a88 + languageName: node + linkType: hard + +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": + version: 1.0.1 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" + peerDependencies: + react: ">=16.8.0" + checksum: 700b6e5bbb37a9231f203bb3af11295eed01d73b2293abece0bc2a2237015e944d7b5114d4887ad9a79776504aa51ed2a8b0ddbc117c54495dd01a6b22f93786 + languageName: node + linkType: hard + +"@emotion/utils@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/utils@npm:1.2.1" + checksum: e0b44be0705b56b079c55faff93952150be69e79b660ae70ddd5b6e09fc40eb1319654315a9f34bb479d7f4ec94be6068c061abbb9e18b9778ae180ad5d97c73 + languageName: node + linkType: hard + +"@emotion/weak-memoize@npm:^0.3.1": + version: 0.3.1 + resolution: "@emotion/weak-memoize@npm:0.3.1" + checksum: b2be47caa24a8122622ea18cd2d650dbb4f8ad37b636dc41ed420c2e082f7f1e564ecdea68122b546df7f305b159bf5ab9ffee872abd0f052e687428459af594 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.9.1 + resolution: "@eslint-community/regexpp@npm:4.9.1" + checksum: 06fb839e9c756f6375cc545c2f2e05a0a64576bd6370e8e3c07983fd29a3d6e164ef4aa48a361f7d27e6713ab79c83053ff6a2ccb78748bc955e344279c4a3b6 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.2": + version: 2.1.2 + resolution: "@eslint/eslintrc@npm:2.1.2" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 + languageName: node + linkType: hard + +"@eslint/js@npm:8.50.0": + version: 8.50.0 + resolution: "@eslint/js@npm:8.50.0" + checksum: 302478f2acaaa7228729ec6a04f56641590185e1d8cd1c836a6db8a6b8009f80a57349341be9fbb9aa1721a7a569d1be3ffc598a33300d22816f11832095386c + languageName: node + linkType: hard + +"@floating-ui/core@npm:^1.4.2": + version: 1.5.0 + resolution: "@floating-ui/core@npm:1.5.0" + dependencies: + "@floating-ui/utils": ^0.1.3 + checksum: 54b4fe26b3c228746ac5589f97303abf158b80aa5f8b99027259decd68d1c2030c4c637648ebd33dfe78a4212699453bc2bd7537fd5a594d3bd3e63d362f666f + languageName: node + linkType: hard + +"@floating-ui/dom@npm:^1.5.1": + version: 1.5.3 + resolution: "@floating-ui/dom@npm:1.5.3" + dependencies: + "@floating-ui/core": ^1.4.2 + "@floating-ui/utils": ^0.1.3 + checksum: 00053742064aac70957f0bd5c1542caafb3bfe9716588bfe1d409fef72a67ed5e60450d08eb492a77f78c22ed1ce4f7955873cc72bf9f9caf2b0f43ae3561c21 + languageName: node + linkType: hard + +"@floating-ui/react-dom@npm:^2.0.2": + version: 2.0.2 + resolution: "@floating-ui/react-dom@npm:2.0.2" + dependencies: + "@floating-ui/dom": ^1.5.1 + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: 4797e1f7a19c1e531ed0d578ccdcbe58970743e5a480ba30424857fc953063f36d481f8c5d69248a8f1d521b739e94bf5e1ffb35506400dea3d914f166ed2f7f + languageName: node + linkType: hard + +"@floating-ui/utils@npm:^0.1.3": + version: 0.1.6 + resolution: "@floating-ui/utils@npm:0.1.6" + checksum: b34d4b5470869727f52e312e08272edef985ba5a450a76de0917ba0a9c6f5df2bdbeb99448e2c60f39b177fb8981c772ff1831424e75123471a27ebd5b52c1eb + languageName: node + linkType: hard + +"@fortawesome/fontawesome-free@npm:^5.12.0": + version: 5.15.4 + resolution: "@fortawesome/fontawesome-free@npm:5.15.4" + checksum: 32281c3df4075290d9a96dfc22f72fadb3da7055d4117e48d34046b8c98032a55fa260ae351b0af5d6f6fb57a2f5d79a4abe52af456da35195f7cb7dda27b4a2 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.11": + version: 0.11.11 + resolution: "@humanwhocodes/config-array@npm:0.11.11" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: db84507375ab77b8ffdd24f498a5b49ad6b64391d30dd2ac56885501d03964d29637e05b1ed5aefa09d57ac667e28028bc22d2da872bfcd619652fbdb5f4ca19 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + 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 + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + slash: ^3.0.0 + checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 + languageName: node + linkType: hard + +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/reporters": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + ci-info: ^3.2.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.7.0 + jest-config: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-resolve-dependencies: ^29.7.0 + jest-runner: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + jest-watcher: ^29.7.0 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed + languageName: node + linkType: hard + +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: ^29.7.0 + jest-snapshot: ^29.7.0 + checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 + languageName: node + linkType: hard + +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/types": ^29.6.3 + jest-mock: ^29.7.0 + checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + "@types/node": "*" + chalk: ^4.0.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^6.0.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.18 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" + dependencies: + "@jest/test-result": ^29.7.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + slash: ^3.0.0 + checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd + languageName: node + linkType: hard + +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab + languageName: node + linkType: hard + +"@jest/types@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/types@npm:26.6.2" + 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 + checksum: a0bd3d2f22f26ddb23f41fddf6e6a30bf4fab2ce79ec1cb6ce6fdfaf90a72e00f4c71da91ec61e13db3b10c41de22cf49d07c57ff2b59171d64b29f909c1d8d6 + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.5 + resolution: "@jridgewell/source-map@npm:0.3.5" + dependencies: + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1ad4dec0bdafbade57920a50acec6634f88a0eb735851e0dda906fa9894e7f0549c492678aad1a10f8e144bfe87f238307bf2a914a1bc85b7781d345417e9f6f + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.19 + resolution: "@jridgewell/trace-mapping@npm:0.3.19" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 956a6f0f6fec060fb48c6bf1f5ec2064e13cd38c8be3873877d4b92b4a27ba58289a34071752671262a3e3c202abcc3fa2aac64d8447b4b0fa1ba3c9047f1c20 + languageName: node + linkType: hard + +"@jupyter/ydoc@npm:^1.0.2": + version: 1.1.1 + resolution: "@jupyter/ydoc@npm:1.1.1" + dependencies: + "@jupyterlab/nbformat": ^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0 + "@lumino/coreutils": ^1.11.0 || ^2.0.0 + "@lumino/disposable": ^1.10.0 || ^2.0.0 + "@lumino/signaling": ^1.10.0 || ^2.0.0 + y-protocols: ^1.0.5 + yjs: ^13.5.40 + checksum: a239b1dd57cfc9ba36c06ac5032a1b6388849ae01a1d0db0d45094f71fdadf4d473b4bf8becbef0cfcdc85cae505361fbec0822b02da5aa48e06b66f742dd7a0 + languageName: node + linkType: hard + +"@jupyterlab/application@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/application@npm:4.0.6" + dependencies: + "@fortawesome/fontawesome-free": ^5.12.0 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/application": ^2.2.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 1212b71d3717bc02543b3eee74e69be799634421bd9b291b7adf07ba27bf6f9c7db860c423c824eaced9c2524db2f6b58de2c58e7edd5de2f0d7fabbb2c94b8c + languageName: node + linkType: hard + +"@jupyterlab/apputils@npm:^4.0.0, @jupyterlab/apputils@npm:^4.1.6": + version: 4.1.6 + resolution: "@jupyterlab/apputils@npm:4.1.6" + dependencies: + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/settingregistry": ^4.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + "@types/react": ^18.0.26 + react: ^18.2.0 + sanitize-html: ~2.7.3 + checksum: 40fb43f5a6464c665f1b941d164f3366ab8ea906fed72894ccf026ebeebf0734409edb6546a151ac267cbd4f945e23474251aed644f7f0f0dbf2548b9230ae22 + languageName: node + linkType: hard + +"@jupyterlab/attachments@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/attachments@npm:4.0.6" + dependencies: + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + checksum: b7efd01d6a0b7f28a4ee8114723cdc33267f1c1f84763b71a04e783024a87f639e442be74eda5afecff7eea5750d094f4da8a46ee711ec1298645eb92252c7ee + languageName: node + linkType: hard + +"@jupyterlab/builder@npm:^4.0.0": + version: 4.0.6 + resolution: "@jupyterlab/builder@npm:4.0.6" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/application": ^2.2.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + ajv: ^8.12.0 + commander: ^9.4.1 + css-loader: ^6.7.1 + duplicate-package-checker-webpack-plugin: ^3.0.0 + fs-extra: ^10.1.0 + glob: ~7.1.6 + license-webpack-plugin: ^2.3.14 + mini-css-extract-plugin: ^2.7.0 + mini-svg-data-uri: ^1.4.4 + path-browserify: ^1.0.0 + process: ^0.11.10 + source-map-loader: ~1.0.2 + style-loader: ~3.3.1 + supports-color: ^7.2.0 + terser-webpack-plugin: ^5.3.7 + webpack: ^5.76.1 + webpack-cli: ^5.0.1 + webpack-merge: ^5.8.0 + worker-loader: ^3.0.2 + bin: + build-labextension: lib/build-labextension.js + checksum: 8ee8db483e07bcc99c45133616a60f57eb2f323898217961cecf82ef875343879327ad7e74adaa860577742d946e8325f16dfcb54845930db41faa9f4bdad70c + languageName: node + linkType: hard + +"@jupyterlab/cells@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/cells@npm:4.0.6" + dependencies: + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/attachments": ^4.0.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/codemirror": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/documentsearch": ^4.0.6 + "@jupyterlab/filebrowser": ^4.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/outputarea": ^4.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/toc": ^6.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: b0bb039c05ee0d83f40b5ccb0efa27d90723808c50821f8b8abedc8770387916bbc46d8a886102bf353b58e434cf33849981f782f1dbb3658835cce219940f33 + languageName: node + linkType: hard + +"@jupyterlab/codeeditor@npm:^4.0.0, @jupyterlab/codeeditor@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/codeeditor@npm:4.0.6" + dependencies: + "@codemirror/state": ^6.2.0 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 831d330273280781dbdc223325d575ac373c0db17fab208f327bce4e1c2286c62f8264d1d612da1a762bc006cd81dfb0eb5108dd3bd8f8298f9be8ecac98b2ca + languageName: node + linkType: hard + +"@jupyterlab/codemirror@npm:^4.0.0, @jupyterlab/codemirror@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/codemirror@npm:4.0.6" + dependencies: + "@codemirror/autocomplete": ^6.5.1 + "@codemirror/commands": ^6.2.3 + "@codemirror/lang-cpp": ^6.0.2 + "@codemirror/lang-css": ^6.1.1 + "@codemirror/lang-html": ^6.4.3 + "@codemirror/lang-java": ^6.0.1 + "@codemirror/lang-javascript": ^6.1.7 + "@codemirror/lang-json": ^6.0.1 + "@codemirror/lang-markdown": ^6.1.1 + "@codemirror/lang-php": ^6.0.1 + "@codemirror/lang-python": ^6.1.3 + "@codemirror/lang-rust": ^6.0.1 + "@codemirror/lang-sql": ^6.4.1 + "@codemirror/lang-wast": ^6.0.1 + "@codemirror/lang-xml": ^6.0.2 + "@codemirror/language": ^6.6.0 + "@codemirror/legacy-modes": ^6.3.2 + "@codemirror/search": ^6.3.0 + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/documentsearch": ^4.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@lezer/common": ^1.0.2 + "@lezer/generator": ^1.2.2 + "@lezer/highlight": ^1.1.4 + "@lezer/markdown": ^1.0.2 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + yjs: ^13.5.40 + checksum: fdd0c4655e8597b1beb985b84b82dcfe29b4c8d0ae7e7ff3b0aecdbc94bc2b94ec0b617b3d59d7739e271e76433b2e624672d94ec64cfa4efc628cab92418175 + languageName: node + linkType: hard + +"@jupyterlab/console@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/console@npm:4.0.6" + dependencies: + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/cells": ^4.0.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 2d7213c83dc088b51976378b88c88f4cfd05d9cd14aa476cb8130ffbfedd7ac8af25a2e9a34b60bc8ec50ea973f33ed7689845d894d00c8cd095b3fec8fb5fa2 + languageName: node + linkType: hard + +"@jupyterlab/coreutils@npm:^6.0.0, @jupyterlab/coreutils@npm:^6.0.6": + version: 6.0.6 + resolution: "@jupyterlab/coreutils@npm:6.0.6" + dependencies: + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + minimist: ~1.2.0 + path-browserify: ^1.0.0 + url-parse: ~1.5.4 + checksum: cf3cfbc7c48cae20549f5514a949b253c2f9d67c79db107ab0a81c2b7a9c08e28f9fd264e3d944a05a8cb1bbb9676c6b4163b75c28788d1cb3a3cc523d44d802 + languageName: node + linkType: hard + +"@jupyterlab/docmanager@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/docmanager@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 25d3f694ae8664ca6c54bfcd36d8913caba9455fea68ed3df23963ce9723254c1f2c38fb6a93e267187f095392507d40cd2a4181c30173306c1c0b962e001b93 + languageName: node + linkType: hard + +"@jupyterlab/docregistry@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/docregistry@npm:4.0.6" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 57de3751ea04037f27596ffe782392fb4840f3fba1776a64bb7b0dc5936a3cee4de115b2133147cda23a697d3da7802daaec0effae10be329d6c774f102091ee + languageName: node + linkType: hard + +"@jupyterlab/documentsearch@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/documentsearch@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: e6cf3533cdae29ca2f81147b26b056718df16998f6d89274d90cffcc70eab705634a7e36d353e9dcaea38640b490315b4ae683e937755547f42b8a5623bc914a + languageName: node + linkType: hard + +"@jupyterlab/filebrowser@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/filebrowser@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docmanager": ^4.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: abe7eca4072a9c3d1f7a756840d0ad209403928b958fe09dfd81fbb693cb18c91c64027157babe1e7353a556b11c070716326b16ee2eb629089399906a3467be + languageName: node + linkType: hard + +"@jupyterlab/git@workspace:.": + version: 0.0.0-use.local + resolution: "@jupyterlab/git@workspace:." + dependencies: + "@babel/core": ^7.0.0 + "@babel/preset-env": ^7.0.0 + "@emotion/react": ^11.10.6 + "@emotion/styled": ^11.10.6 + "@jupyterlab/application": ^4.0.6 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/builder": ^4.0.0 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/codemirror": ^4.0.6 + "@jupyterlab/console": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/filebrowser": ^4.0.6 + "@jupyterlab/mainmenu": ^4.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/settingregistry": ^4.0.6 + "@jupyterlab/terminal": ^4.0.6 + "@jupyterlab/testutils": ^4.0.0 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/collections": ^2.0.0 + "@lumino/commands": ^2.0.1 + "@lumino/coreutils": ^2.0.0 + "@lumino/disposable": ^2.0.0 + "@lumino/messaging": ^2.0.0 + "@lumino/polling": ^2.0.0 + "@lumino/signaling": ^2.0.0 + "@lumino/widgets": ^2.0.1 + "@mui/icons-material": ^5.11.16 + "@mui/lab": ^5.0.0-alpha.127 + "@mui/material": ^5.12.1 + "@mui/styles": ^5.12.0 + "@types/diff-match-patch": ^1.0.32 + "@types/enzyme": ^3.1.15 + "@types/jest": ^29.2.0 + "@types/json-schema": ^7.0.11 + "@types/react": ^18.0.26 + "@types/react-addons-linked-state-mixin": ^0.14.22 + "@types/react-dom": ^18.2.0 + "@types/react-virtualized-auto-sizer": ^1.0.0 + "@types/react-window": ^1.8.2 + "@types/resize-observer-browser": ^0.1.7 + "@typescript-eslint/eslint-plugin": ^6.1.0 + "@typescript-eslint/parser": ^6.1.0 + "@wojtekmaj/enzyme-adapter-react-17": ^0.8.0 + all-contributors-cli: ^6.14.0 + css-loader: ^6.7.1 + diff-match-patch: ^1.0.4 + enzyme: ^3.7.0 + eslint: ^8.36.0 + eslint-config-prettier: ^8.8.0 + eslint-plugin-prettier: ^5.0.0 + eslint-plugin-react: ^7.33.0 + filesize: ^10.0.7 + genversion: ^2.2.1 + husky: ^8.0.3 + identity-obj-proxy: ^3.0.0 + jest: ^29.2.0 + jest-fetch-mock: ^3.0.0 + lint-staged: ^13.2.3 + mkdirp: ^1.0.3 + nbdime: ^7.0.0-alpha.0 + nbdime-jupyterlab: ^3.0.0-alpha.0 + npm-run-all: ^4.1.5 + prettier: ^3.0.0 + react: ^18.2.0 + react-dom: ^18.2.0 + react-virtualized-auto-sizer: ^1.0.2 + react-window: ^1.8.5 + rimraf: ^5.0.1 + source-map-loader: ^1.0.2 + style-loader: ^3.3.1 + stylelint: ^15.10.1 + stylelint-config-recommended: ^13.0.0 + stylelint-config-standard: ^34.0.0 + stylelint-csstree-validator: ^3.0.0 + stylelint-prettier: ^4.0.0 + ts-jest: ^26.0.0 + typescript: ~5.0.2 + typestyle: ^2.0.1 + yjs: ^13.5.40 + languageName: unknown + linkType: soft + +"@jupyterlab/lsp@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/lsp@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + lodash.mergewith: ^4.6.1 + vscode-jsonrpc: ^6.0.0 + vscode-languageserver-protocol: ^3.17.0 + vscode-ws-jsonrpc: ~1.0.2 + checksum: 7a20f402bd2777e5ec36efe3193357ae59a8d619516ccf34bb569afe68d32df2af2c77479216826a08fd6dc16952e1430f2465e1fd9878bf092ca8773e5e2d1e + languageName: node + linkType: hard + +"@jupyterlab/mainmenu@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/mainmenu@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 3144f518add0b5242da63277ca94a0eae5b5d2d455ac8518aed72a86eebc240a15b76147ee54d5e3b34fc6421d25af8af8268a391fcfcdf037b3b16378dfb563 + languageName: node + linkType: hard + +"@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.0.0, @jupyterlab/nbformat@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/nbformat@npm:4.0.6" + dependencies: + "@lumino/coreutils": ^2.1.2 + checksum: 43ace863be98a82875a55a947828b9b987cff35bb484e6cb6474c97f60aadbf31027c5f2fdf81b4ee2d108dc735b92c15c9b35cded765b0e476ebf0c8fd670f6 + languageName: node + linkType: hard + +"@jupyterlab/notebook@npm:^4.0.0, @jupyterlab/notebook@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/notebook@npm:4.0.6" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/cells": ^4.0.6 + "@jupyterlab/codeeditor": ^4.0.6 + "@jupyterlab/codemirror": ^4.0.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/documentsearch": ^4.0.6 + "@jupyterlab/lsp": ^4.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/settingregistry": ^4.0.6 + "@jupyterlab/statusbar": ^4.0.6 + "@jupyterlab/toc": ^6.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 9ffb5f39b5e6d34fc2df2662c790121fda3880a271f0606bd56f3bcff416b43b1697640d43f0a30231fcf24a935e193ca9b5bf016d34675ede0e02e1185afffb + languageName: node + linkType: hard + +"@jupyterlab/observables@npm:^5.0.6": + version: 5.0.6 + resolution: "@jupyterlab/observables@npm:5.0.6" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + checksum: 23232972e6a049b2addeae1d445bc3a10bb6c9a3dd4794225a0344aaa1ff62421ee300ef8803a19a3f068d2bba2de8b9a8dec719a7f47019fbd77c8d5dafb7a0 + languageName: node + linkType: hard + +"@jupyterlab/outputarea@npm:^4.0.0, @jupyterlab/outputarea@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/outputarea@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 2691fe7e4bdff895c821e970edbc19867107dbd8150aa7f32c7f3a4a7608f9ae9c7862dc5887fdca6983b9d6a947e05f23bbf5160c7c99eef93a0abf20d085a4 + languageName: node + linkType: hard + +"@jupyterlab/rendermime-interfaces@npm:^3.8.6": + version: 3.8.6 + resolution: "@jupyterlab/rendermime-interfaces@npm:3.8.6" + dependencies: + "@lumino/coreutils": ^1.11.0 || ^2.1.2 + "@lumino/widgets": ^1.37.2 || ^2.3.0 + checksum: 84ba0c3979e6ace6246e00248d1248075afb112f55be202257bb89a553b235d36ca82879c56f46f58285a5fc6d39914e93fea203c53245e0ac8d1b5ef838bb50 + languageName: node + linkType: hard + +"@jupyterlab/rendermime@npm:^4.0.0, @jupyterlab/rendermime@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/rendermime@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + lodash.escape: ^4.0.1 + checksum: 8f44601ccd6abe9985f8f713dcabf48ae38246b8b5a17a3963ebfe298dc2a03cc49d1f99c6d3bfeadbe1eb74803d0b3138c01347693a99166d7d70cb832c400b + languageName: node + linkType: hard + +"@jupyterlab/services@npm:^7.0.0, @jupyterlab/services@npm:^7.0.6": + version: 7.0.6 + resolution: "@jupyterlab/services@npm:7.0.6" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/settingregistry": ^4.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + ws: ^8.11.0 + checksum: 6e12ef309559977209e61ce3ec8ca74aa486d54f50d8f38211b684055fb2335a21c2ae6e846d2863e48524bffd7d6ac4d36dfc9f7ca610ae4b1c60752fa6c3a8 + languageName: node + linkType: hard + +"@jupyterlab/settingregistry@npm:^4.0.0, @jupyterlab/settingregistry@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/settingregistry@npm:4.0.6" + dependencies: + "@jupyterlab/nbformat": ^4.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@rjsf/utils": ^5.1.0 + ajv: ^8.12.0 + json5: ^2.2.3 + peerDependencies: + react: ">=16" + checksum: 70b6fc44a25e0d4ec36501c1418fe2764b9a9415f892df0901c43480b608a1621141ec8045183dfbca5aedf11ebaf1518dd76e2e96373b9ebe0efa6586ce856d + languageName: node + linkType: hard + +"@jupyterlab/statedb@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/statedb@npm:4.0.6" + dependencies: + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + checksum: de507d094afcce7f7d12f9dc846788765616140b2f75ea22997f780056baaaadae0cf9683471a1d96c61d448b38860640c823302aeef0d5e5d7c9cf598074328 + languageName: node + linkType: hard + +"@jupyterlab/statusbar@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/statusbar@npm:4.0.6" + dependencies: + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: c5d579b101e19670182d87de0d601fc9c73c40b5a81120e18e6cd7853ee9fd744fa31524f24b2c92cb587bb2d6aa54c08f6e257d868426a73d968e48b1101b7c + languageName: node + linkType: hard + +"@jupyterlab/terminal@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/terminal@npm:4.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/translation": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/widgets": ^2.3.0 + xterm: ~5.1.0 + xterm-addon-canvas: ~0.3.0 + xterm-addon-fit: ~0.7.0 + xterm-addon-web-links: ~0.8.0 + xterm-addon-webgl: ~0.14.0 + checksum: 28ad5b112e173538295083a4620911659fbde54bb1775195811b732349264a1fc934a19ccc94717663af4eed6684a0fdb3dc577c78dbfc02c8162f7a4328871e + languageName: node + linkType: hard + +"@jupyterlab/testing@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/testing@npm:4.0.6" + dependencies: + "@babel/core": ^7.10.2 + "@babel/preset-env": ^7.10.2 + "@jupyterlab/coreutils": ^6.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/signaling": ^2.1.2 + child_process: ~1.0.2 + deepmerge: ^4.2.2 + fs-extra: ^10.1.0 + identity-obj-proxy: ^3.0.0 + jest: ^29.2.0 + jest-environment-jsdom: ^29.3.0 + jest-junit: ^15.0.0 + node-fetch: ^2.6.0 + simulate-event: ~1.4.0 + ts-jest: ^29.1.0 + peerDependencies: + typescript: ">=4.3" + checksum: b6e7326d90ca2a7d36a825ea32557f2ce4436dc4c8965f3603fa430aad138b703f0e206c432509c48c72294a959ab47881a81c8c88b1e378b53fe9108861791e + languageName: node + linkType: hard + +"@jupyterlab/testutils@npm:^4.0.0": + version: 4.0.6 + resolution: "@jupyterlab/testutils@npm:4.0.6" + dependencies: + "@jupyterlab/application": ^4.0.6 + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/notebook": ^4.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/testing": ^4.0.6 + checksum: 7a431810691dac69e48e2900af09cd9fec3be958a7e3302baf5bbe4c8b4d2b5f4fbef1987e719675637c53536f65800215e56e2874bc8eafdbb3b4bc2b1141e0 + languageName: node + linkType: hard + +"@jupyterlab/toc@npm:^6.0.6": + version: 6.0.6 + resolution: "@jupyterlab/toc@npm:6.0.6" + dependencies: + "@jupyterlab/apputils": ^4.1.6 + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/docregistry": ^4.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime": ^4.0.6 + "@jupyterlab/translation": ^4.0.6 + "@jupyterlab/ui-components": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: d8d955a00e6678c50f73f18205dd79d77c752c3b0d33699554cdb77c3501657708c699642889975c97b58a85704c3bca40de01019ce087f188681bb843f35c3a + languageName: node + linkType: hard + +"@jupyterlab/translation@npm:^4.0.0, @jupyterlab/translation@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/translation@npm:4.0.6" + dependencies: + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/services": ^7.0.6 + "@jupyterlab/statedb": ^4.0.6 + "@lumino/coreutils": ^2.1.2 + checksum: 490243a26898bbdcc1909e8e1649be90580c6d4502417590fd1b3ca24db5aeff2323e567dbfb1d528c56df89ed2e7717753ece784134f9e409d14df92bf25682 + languageName: node + linkType: hard + +"@jupyterlab/ui-components@npm:^4.0.6": + version: 4.0.6 + resolution: "@jupyterlab/ui-components@npm:4.0.6" + dependencies: + "@jupyterlab/coreutils": ^6.0.6 + "@jupyterlab/observables": ^5.0.6 + "@jupyterlab/rendermime-interfaces": ^3.8.6 + "@jupyterlab/translation": ^4.0.6 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + "@rjsf/core": ^5.1.0 + "@rjsf/utils": ^5.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + typestyle: ^2.0.4 + peerDependencies: + react: ^18.2.0 + checksum: 02997c3c35c15c0eda6a0d49fe9cfd12a3c5194c026b2ae8d8e53c7af80b769ba1598e7c24283450bacae7b8fab838d18f6c614d686c98d3d43e68f1f00b2528 + languageName: node + linkType: hard + +"@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.0.2, @lezer/common@npm:^1.1.0": + version: 1.1.0 + resolution: "@lezer/common@npm:1.1.0" + checksum: 93c208a44d1c0bdf7407853ba7c4ddcedf1c52d1b82170813d83b9bd6301aa23587405ac54332fe39ce8bc37f706936ab237ceb4d3d535d1dead650153b6474c + languageName: node + linkType: hard + +"@lezer/cpp@npm:^1.0.0": + version: 1.1.1 + resolution: "@lezer/cpp@npm:1.1.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: c9e1db19776eafbfe0c3b8448d46c94d9a1d30f7fef630292e63bab82e6d5d6903a043ee8cf341bcbf84c00ee0d79b8c255bab8fd8e0a91355ae912b53c78935 + languageName: node + linkType: hard + +"@lezer/css@npm:^1.0.0, @lezer/css@npm:^1.1.0": + version: 1.1.3 + resolution: "@lezer/css@npm:1.1.3" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: c8069ef0a6751441d2dc9180f7ebfd7aeb35df0ca2f1a748a2f26203a9ef6cc30f17f3074e2b49520453eb39329dadfdbbb901c6d9d067dc955ceb58c1f8cc6a + languageName: node + linkType: hard + +"@lezer/generator@npm:^1.2.2": + version: 1.5.1 + resolution: "@lezer/generator@npm:1.5.1" + dependencies: + "@lezer/common": ^1.0.2 + "@lezer/lr": ^1.3.0 + bin: + lezer-generator: src/lezer-generator.cjs + checksum: 4d8267e6d356e48ca5214a234679b2b3b1d3706cb9dffecee4495b7a16c8a02502d6a078f8afdf5d8c79f94af34f2c1b5c08556aead8376d7b23795612b651d0 + languageName: node + linkType: hard + +"@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3, @lezer/highlight@npm:^1.1.4": + version: 1.1.6 + resolution: "@lezer/highlight@npm:1.1.6" + dependencies: + "@lezer/common": ^1.0.0 + checksum: 411a702394c4c996b7d7f145a38f3a85a8cc698b3918acc7121c629255bb76d4ab383753f69009e011dc415210c6acbbb5b27bde613259ab67e600b29397b03b + languageName: node + linkType: hard + +"@lezer/html@npm:^1.3.0": + version: 1.3.6 + resolution: "@lezer/html@npm:1.3.6" + dependencies: + "@lezer/common": ^1.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 1d3af781660968505e5083a34f31ea3549fd5f3949227fa93cc318bca61bce76ffe977bd875624ba938a2039834ec1a33df5d365e94c48131c85dd26f980d92c + languageName: node + linkType: hard + +"@lezer/java@npm:^1.0.0": + version: 1.0.4 + resolution: "@lezer/java@npm:1.0.4" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 97f5a2c2d733afba5dc57a0da9a97515b19b5e63bb5937717dac4e8c9baed74d15c0cb5c1580858b678931f11d517c56d89f903968fa48931f9c62e2ea67a107 + languageName: node + linkType: hard + +"@lezer/javascript@npm:^1.0.0": + version: 1.4.7 + resolution: "@lezer/javascript@npm:1.4.7" + dependencies: + "@lezer/highlight": ^1.1.3 + "@lezer/lr": ^1.3.0 + checksum: 37c05793e0e45280fa5d7b845a3132a84596105d48b7d2c195abea0a198477ea6719b07d1c8967679e80fc466388151956901fd6962479c130ffda64a6d09591 + languageName: node + linkType: hard + +"@lezer/json@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/json@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: fcd17178f6a58e71c83e08fdc047e3708528b28591ba8f08ed35268f370d1ec9b63af0afa9d82a77fec26e9eb477ab3cfdc31c951e080d118ef607f9f9bb52e3 + languageName: node + linkType: hard + +"@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.1.0, @lezer/lr@npm:^1.3.0": + version: 1.3.13 + resolution: "@lezer/lr@npm:1.3.13" + dependencies: + "@lezer/common": ^1.0.0 + checksum: aad0cb8908796a6b49116842fd490093aa0de54b48150a60a4f418815c014f7a1b4355615832e305caea5c0ba8c5ab577f82aebcd0ea04586b8199284ef0fec8 + languageName: node + linkType: hard + +"@lezer/markdown@npm:^1.0.0, @lezer/markdown@npm:^1.0.2": + version: 1.1.0 + resolution: "@lezer/markdown@npm:1.1.0" + dependencies: + "@lezer/common": ^1.0.0 + "@lezer/highlight": ^1.0.0 + checksum: b3699c0724dd41e3e6e3078a0e1bcd272ccaebf17b20e5160de3ecf26200cdaa59aa19c9542aac5ab8c7e3aecce1003544b016bb5c32e458bbd5982add8ca0bf + languageName: node + linkType: hard + +"@lezer/php@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/php@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.1.0 + checksum: a847c255c030b4d38913ddf1d5bd7324d83be7ef8d1d244542870be03b9bf7dc71283afeb2415c40dfd188cb99f0cc44bad760b5f3b7c35c3b8e5e00253848fc + languageName: node + linkType: hard + +"@lezer/python@npm:^1.1.4": + version: 1.1.8 + resolution: "@lezer/python@npm:1.1.8" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: e4a4e0b0fd871acff25111d4f767944b5015479776504b85c4431859c8a2859fdfa6362f204f3027cf9858c7ea907fd57244852a18b67da9eba3b2fe38d31b03 + languageName: node + linkType: hard + +"@lezer/rust@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/rust@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 1e02fdf09206979e7d4f87b020589f410c4c5e452a7b7b0296f6772ce3571c1bd7ed37495fbeeecf3d4423000f2efdabd462ba8a949c2b351fd35550327a7613 + languageName: node + linkType: hard + +"@lezer/xml@npm:^1.0.0": + version: 1.0.2 + resolution: "@lezer/xml@npm:1.0.2" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: e834bcc5c0dee3eecb5362b3f10187e80908b6a293ebacf5750547a64b57ec710a068497334f109ecf4e5ea05e09e7e9c00e48ebbd30050673ea67b0929e5398 + languageName: node + linkType: hard + +"@lumino/algorithm@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/algorithm@npm:2.0.1" + checksum: cbf7fcf6ee6b785ea502cdfddc53d61f9d353dcb9659343511d5cd4b4030be2ff2ca4c08daec42f84417ab0318a3d9972a17319fa5231693e109ab112dcf8000 + languageName: node + linkType: hard + +"@lumino/application@npm:^2.2.1": + version: 2.2.1 + resolution: "@lumino/application@npm:2.2.1" + dependencies: + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: a33e661703728440bc7d2ddb4674261f4de0d20eb8c9846646cbd6debac03b5c65e78d739a500903550fd83b8f47b47fa82ec178c97bc9967ca3ac4014075cde + languageName: node + linkType: hard + +"@lumino/collections@npm:^2.0.0, @lumino/collections@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/collections@npm:2.0.1" + dependencies: + "@lumino/algorithm": ^2.0.1 + checksum: 8a29b7973a388a33c5beda0819dcd2dc2aad51a8406dcfd4581b055a9f77a39dc5800f7a8b4ae3c0bb97ae7b56a7a869e2560ffb7a920a28e93b477ba05907d6 + languageName: node + linkType: hard + +"@lumino/commands@npm:^2.0.1, @lumino/commands@npm:^2.1.3": + version: 2.1.3 + resolution: "@lumino/commands@npm:2.1.3" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/keyboard": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + checksum: e4e3ee279f2a5e8d68e4ce142c880333f5542f90c684972402356936ecb5cf5e07163800b59e7cb8c911cbdb4e5089edcc5dd2990bc8db10c87517268de1fc5d + languageName: node + linkType: hard + +"@lumino/coreutils@npm:^1.11.0 || ^2.0.0, @lumino/coreutils@npm:^1.11.0 || ^2.1.2, @lumino/coreutils@npm:^2.0.0, @lumino/coreutils@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/coreutils@npm:2.1.2" + checksum: 7865317ac0676b448d108eb57ab5d8b2a17c101995c0f7a7106662d9fe6c859570104525f83ee3cda12ae2e326803372206d6f4c1f415a5b59e4158a7b81066f + languageName: node + linkType: hard + +"@lumino/disposable@npm:^1.10.0 || ^2.0.0, @lumino/disposable@npm:^2.0.0, @lumino/disposable@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/disposable@npm:2.1.2" + dependencies: + "@lumino/signaling": ^2.1.2 + checksum: ac2fb2bf18d0b2939fda454f3db248a0ff6e8a77b401e586d1caa9293b3318f808b93a117c9c3ac27cd17aab545aea83b49108d099b9b2f5503ae2a012fbc6e2 + languageName: node + linkType: hard + +"@lumino/domutils@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/domutils@npm:2.0.1" + checksum: 61fa0ab226869dfbb763fc426790cf5a43b7d6f4cea1364c6dd56d61c44bff05eea188d33ff847449608ef58ed343161bee15c19b96f35410e4ee35815dc611a + languageName: node + linkType: hard + +"@lumino/dragdrop@npm:^2.1.3": + version: 2.1.3 + resolution: "@lumino/dragdrop@npm:2.1.3" + dependencies: + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + checksum: d5f7eb4cc9f9a084cb9af10f02d6741b25d683350878ecbc324e24ba9d4b5246451a410e2ca5fff227aab1c191d1e73a2faf431f93e13111d67a4e426e126258 + languageName: node + linkType: hard + +"@lumino/keyboard@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/keyboard@npm:2.0.1" + checksum: cf33f13427a418efd7cc91061233321e860d5404f3d86397781028309bef86c8ad2d88276ffe335c1db0fe619bd9d1e60641c81f881696957a58703ee4652c3e + languageName: node + linkType: hard + +"@lumino/messaging@npm:^2.0.0, @lumino/messaging@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/messaging@npm:2.0.1" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/collections": ^2.0.1 + checksum: 964c4651c374b17452b4252b7d71500b32d2ecd87c192fc5bcf5d3bd1070661d78d07edcac8eca7d1d6fd50aa25992505485e1296d6dd995691b8e349b652045 + languageName: node + linkType: hard + +"@lumino/polling@npm:^2.0.0, @lumino/polling@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/polling@npm:2.1.2" + dependencies: + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + checksum: fa9b401e6dbeb8f31d7e3ba485e8ef1e0c92b3f2da086239c0ed49931026f5d3528709193c93e031e35ac624fb4bbbfcdcbaa0e25eb797f36e2952e5cd91e9e3 + languageName: node + linkType: hard + +"@lumino/properties@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/properties@npm:2.0.1" + checksum: c50173a935148cc4148fdaea119df1d323ee004ae16ab666800388d27e9730345629662d85f25591683329b39f0cdae60ee8c94e8943b4d0ef7d7370a38128d6 + languageName: node + linkType: hard + +"@lumino/signaling@npm:^1.10.0 || ^2.0.0, @lumino/signaling@npm:^2.0.0, @lumino/signaling@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/signaling@npm:2.1.2" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + checksum: ad7d7153db57980da899c43e412e6130316ef30b231a70250e7af49058db16cadb018c1417a2ea8083d83c48623cfe6b705fa82bf10216b1a8949aed9f4aca4e + languageName: node + linkType: hard + +"@lumino/virtualdom@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/virtualdom@npm:2.0.1" + dependencies: + "@lumino/algorithm": ^2.0.1 + checksum: cf59b6f15b430e13e9e657b7a0619b9056cd9ea7b2a87f407391d071c501b77403c302b6a66dca510382045e75b2e3fe551630bb391f1c6b33678057d4bec164 + languageName: node + linkType: hard + +"@lumino/widgets@npm:^1.37.2 || ^2.3.0, @lumino/widgets@npm:^2.0.1, @lumino/widgets@npm:^2.3.0": + version: 2.3.0 + resolution: "@lumino/widgets@npm:2.3.0" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/keyboard": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + checksum: a8559bd3574b7fc16e7679e05994c515b0d3e78dada35786d161f67c639941d134e92ce31d95c2e4ac06709cdf83b0e7fb4b6414a3f7779579222a2fb525d025 + languageName: node + linkType: hard + +"@mui/base@npm:5.0.0-beta.18": + version: 5.0.0-beta.18 + resolution: "@mui/base@npm:5.0.0-beta.18" + dependencies: + "@babel/runtime": ^7.23.1 + "@floating-ui/react-dom": ^2.0.2 + "@mui/types": ^7.2.5 + "@mui/utils": ^5.14.12 + "@popperjs/core": ^2.11.8 + clsx: ^2.0.0 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7d4ca1e9d537b7b5850567f1adecd1caa47b8613b43a587cf2f399cfda0a8c17dfda06b030c0bea554b76abe7ac25bb9b1af3c996574def5f860cda0c6ea4a3c + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^5.14.12": + version: 5.14.12 + resolution: "@mui/core-downloads-tracker@npm:5.14.12" + checksum: 1c1576ceecf7cade9e0d7a531632f5f9db24853d9ebbd47bb9ed943a3af7de734ad4f3374bab79880e9591db3ea55ea84cc10df72177f9ca5e32cc7662e04405 + languageName: node + linkType: hard + +"@mui/icons-material@npm:^5.11.16": + version: 5.14.12 + resolution: "@mui/icons-material@npm:5.14.12" + dependencies: + "@babel/runtime": ^7.23.1 + peerDependencies: + "@mui/material": ^5.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 55f147242afc47c50b4761e487c1d2a114d97384f94efe915a2ec6822431c0b6f5271118f918b8511a26d5dbd8e858c8ee2cbce622057ce89e3b00b3ea9829e2 + languageName: node + linkType: hard + +"@mui/lab@npm:^5.0.0-alpha.127": + version: 5.0.0-alpha.147 + resolution: "@mui/lab@npm:5.0.0-alpha.147" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/base": 5.0.0-beta.18 + "@mui/system": ^5.14.12 + "@mui/types": ^7.2.5 + "@mui/utils": ^5.14.12 + "@mui/x-tree-view": 6.0.0-alpha.1 + clsx: ^2.0.0 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@mui/material": ^5.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 84ab1f0fb447da2af012b631b904e136e297d5ad11c90590ec6378b8028a46031c7e983e98800d53abff179066bf80d6c6206206986d9065a1c4049bee43a378 + languageName: node + linkType: hard + +"@mui/material@npm:^5.12.1": + version: 5.14.12 + resolution: "@mui/material@npm:5.14.12" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/base": 5.0.0-beta.18 + "@mui/core-downloads-tracker": ^5.14.12 + "@mui/system": ^5.14.12 + "@mui/types": ^7.2.5 + "@mui/utils": ^5.14.12 + "@types/react-transition-group": ^4.4.6 + clsx: ^2.0.0 + csstype: ^3.1.2 + prop-types: ^15.8.1 + react-is: ^18.2.0 + react-transition-group: ^4.4.5 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: a0d3b52ce3cc282da04036db0805f95f27b35a9c899f132f962fe96f05d3eb112e99ccbf6bd9d05cae617b24beda95470aedaff129d6e39d1b52e1ddf80a9e12 + languageName: node + linkType: hard + +"@mui/private-theming@npm:^5.14.12": + version: 5.14.12 + resolution: "@mui/private-theming@npm:5.14.12" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/utils": ^5.14.12 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: f8127347dc29126fece3b530cb156f6ababf747b64bb1c712874375e6efae6c738c014304d9553001d67a59b24ca6a665f2d03bb5ae137f03bdba90815f0ecc1 + languageName: node + linkType: hard + +"@mui/styled-engine@npm:^5.14.12": + version: 5.14.12 + resolution: "@mui/styled-engine@npm:5.14.12" + dependencies: + "@babel/runtime": ^7.23.1 + "@emotion/cache": ^11.11.0 + csstype: ^3.1.2 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + checksum: c689ccad59e7fd54cd8367838612daa4f132c64d8c6b99ccb7c8f9697b5c940a6bf7edcccd686ce437b565dbcf3bfc12bb0dea47cbd5fbd750ea1553017f9c0d + languageName: node + linkType: hard + +"@mui/styles@npm:^5.12.0": + version: 5.14.12 + resolution: "@mui/styles@npm:5.14.12" + dependencies: + "@babel/runtime": ^7.23.1 + "@emotion/hash": ^0.9.1 + "@mui/private-theming": ^5.14.12 + "@mui/types": ^7.2.5 + "@mui/utils": ^5.14.12 + clsx: ^2.0.0 + csstype: ^3.1.2 + hoist-non-react-statics: ^3.3.2 + jss: ^10.10.0 + jss-plugin-camel-case: ^10.10.0 + jss-plugin-default-unit: ^10.10.0 + jss-plugin-global: ^10.10.0 + jss-plugin-nested: ^10.10.0 + jss-plugin-props-sort: ^10.10.0 + jss-plugin-rule-value-function: ^10.10.0 + jss-plugin-vendor-prefixer: ^10.10.0 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 49af7c32e10b80b0846740811ce63f72bda1454556faf83eac457aa6270748448a72a7689bcd8237be27ddf4ca5e378fdbe0f47ecb524338594c0f7bfb5b7fec + languageName: node + linkType: hard + +"@mui/system@npm:^5.14.12": + version: 5.14.12 + resolution: "@mui/system@npm:5.14.12" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/private-theming": ^5.14.12 + "@mui/styled-engine": ^5.14.12 + "@mui/types": ^7.2.5 + "@mui/utils": ^5.14.12 + clsx: ^2.0.0 + csstype: ^3.1.2 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 70c3920eadc593395a2d258ddea0f3b28689c7f02fdaf97fc205e16efaeebe462b2ab01c69a20a3bcb011e0d07ea47fa66a433e70d0a1ce15d7b694fb3c52135 + languageName: node + linkType: hard + +"@mui/types@npm:^7.2.5": + version: 7.2.5 + resolution: "@mui/types@npm:7.2.5" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 2807e9a8eb251294eee6384a4d68b2159f7660466625f1781e9efea282aa7c6ff35b42bc7039c2d43e7a5ac80291dcb85c4110022b0b6de4e12b6406b62f3dc1 + languageName: node + linkType: hard + +"@mui/utils@npm:^5.14.12, @mui/utils@npm:^5.14.3": + version: 5.14.12 + resolution: "@mui/utils@npm:5.14.12" + dependencies: + "@babel/runtime": ^7.23.1 + "@types/prop-types": ^15.7.7 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 41470b6292b7a46c71fb0a0acc6a5f05a5e080648106b8805555de920e8f748669c7e8d39cbbcf0f52be9053927bb8439a748e24bd02bc1a220c9bded4435f42 + languageName: node + linkType: hard + +"@mui/x-tree-view@npm:6.0.0-alpha.1": + version: 6.0.0-alpha.1 + resolution: "@mui/x-tree-view@npm:6.0.0-alpha.1" + dependencies: + "@babel/runtime": ^7.22.6 + "@mui/utils": ^5.14.3 + "@types/react-transition-group": ^4.4.6 + clsx: ^2.0.0 + prop-types: ^15.8.1 + react-transition-group: ^4.4.5 + peerDependencies: + "@emotion/react": ^11.9.0 + "@emotion/styled": ^11.8.1 + "@mui/base": ^5.0.0-alpha.87 + "@mui/material": ^5.8.6 + "@mui/system": ^5.8.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + checksum: 87e659401c81ba4b1ed7eccb9e3167b4d22f27630c26bb436ff6eb4f79aa2fc0f3c50afda4625c9df898bcd1710c4de47813ee8f5bba51d0d9c85fb678a53658 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@pkgr/utils@npm:^2.3.1": + version: 2.4.2 + resolution: "@pkgr/utils@npm:2.4.2" + dependencies: + cross-spawn: ^7.0.3 + fast-glob: ^3.3.0 + is-glob: ^4.0.3 + open: ^9.1.0 + picocolors: ^1.0.0 + tslib: ^2.6.0 + checksum: 24e04c121269317d259614cd32beea3af38277151c4002df5883c4be920b8e3490bb897748e844f9d46bf68230f86dabd4e8f093773130e7e60529a769a132fc + languageName: node + linkType: hard + +"@popperjs/core@npm:^2.11.8": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: e5c69fdebf52a4012f6a1f14817ca8e9599cb1be73dd1387e1785e2ed5e5f0862ff817f420a87c7fc532add1f88a12e25aeb010ffcbdc98eace3d55ce2139cf0 + languageName: node + linkType: hard + +"@rjsf/core@npm:^5.1.0": + version: 5.13.0 + resolution: "@rjsf/core@npm:5.13.0" + dependencies: + lodash: ^4.17.21 + lodash-es: ^4.17.21 + markdown-to-jsx: ^7.3.2 + nanoid: ^3.3.6 + prop-types: ^15.8.1 + peerDependencies: + "@rjsf/utils": ^5.12.x + react: ^16.14.0 || >=17 + checksum: d7d66d20fcdf310f4b152c22e1ac1ca8abe5f40b502711c9cabc4241b3252ec0e58345aa194529d2bdfb7a51b9f1179c9ddefc0cdc7fd9f94ad10c5e5b1032b8 + languageName: node + linkType: hard + +"@rjsf/utils@npm:^5.1.0": + version: 5.13.0 + resolution: "@rjsf/utils@npm:5.13.0" + dependencies: + json-schema-merge-allof: ^0.8.1 + jsonpointer: ^5.0.1 + lodash: ^4.17.21 + lodash-es: ^4.17.21 + react-is: ^18.2.0 + peerDependencies: + react: ^16.14.0 || >=17 + checksum: 283e2b405eac2f4fdd243b2e35ade7e83a4bf7551eb5e075499e8eb5d3a3ae161e9c047bcf63d2e6fef7c6b2e7438f1a150f353b909df992e85194940c311f9b + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.0 + resolution: "@sinonjs/commons@npm:3.0.0" + dependencies: + type-detect: 4.0.8 + checksum: b4b5b73d4df4560fb8c0c7b38c7ad4aeabedd362f3373859d804c988c725889cde33550e4bcc7cd316a30f5152a2d1d43db71b6d0c38f5feef71fd8d016763f8 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.20.2 + resolution: "@types/babel__core@npm:7.20.2" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: 564fbaa8ff1305d50807ada0ec227c3e7528bebb2f8fe6b2ed88db0735a31511a74ad18729679c43eeed8025ed29d408f53059289719e95ab1352ed559a100bd + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.4 + resolution: "@types/babel__generator@npm:7.6.4" + dependencies: + "@babel/types": ^7.0.0 + checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.1 + resolution: "@types/babel__template@npm:7.4.1" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.20.1 + resolution: "@types/babel__traverse@npm:7.20.1" + dependencies: + "@babel/types": ^7.20.7 + checksum: 58341e23c649c0eba134a1682d4f20d027fad290d92e5740faa1279978f6ed476fc467ae51ce17a877e2566d805aeac64eae541168994367761ec883a4150221 + languageName: node + linkType: hard + +"@types/cheerio@npm:*": + version: 0.22.31 + resolution: "@types/cheerio@npm:0.22.31" + dependencies: + "@types/node": "*" + checksum: 8d73d22fdd384c290514dad6f9f4a436f5a90bc836bbe9b46fe4f557041a03484f0547291d0347185a806149f465355fc225dc87477b8cf5af5be307bb75e6a4 + languageName: node + linkType: hard + +"@types/diff-match-patch@npm:^1.0.32": + version: 1.0.32 + resolution: "@types/diff-match-patch@npm:1.0.32" + checksum: 8431ab2bf2f0e96ece30beddeae3bc8024429bd6071f1ab695c3f64112b2551446fc4a746a44a7a7d14e47ffce622333286c1c78869cfb510c775a9e8c47a1b1 + languageName: node + linkType: hard + +"@types/enzyme@npm:^3.1.15": + version: 3.10.12 + resolution: "@types/enzyme@npm:3.10.12" + dependencies: + "@types/cheerio": "*" + "@types/react": "*" + checksum: 356e9142566b68c9b324ae71a7b93f03512a1c009a1d337a25ce4f495590f3e79de08aa4a0016d6224cb228c27832d92b6d7d3276ba5962302c41d0577e8a912 + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.3": + version: 3.7.4 + resolution: "@types/eslint-scope@npm:3.7.4" + dependencies: + "@types/eslint": "*" + "@types/estree": "*" + checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 8.44.2 + resolution: "@types/eslint@npm:8.44.2" + dependencies: + "@types/estree": "*" + "@types/json-schema": "*" + checksum: 25b3ef61bae96350026593c9914c8a61ee02fde48ab8d568a73ee45032f13c0028c62e47a5ff78715af488dfe8e8bba913f7d30f859f60c7f9e639d328e80482 + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.1 + resolution: "@types/estree@npm:1.0.1" + checksum: e9aa175eacb797216fafce4d41e8202c7a75555bc55232dee0f9903d7171f8f19f0ae7d5191bb1a88cb90e65468be508c0df850a9fb81b4433b293a5a749899d + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.7 + resolution: "@types/graceful-fs@npm:4.1.7" + dependencies: + "@types/node": "*" + checksum: 8b97e208f85c9efd02a6003a582c77646dd87be0af13aec9419a720771560a8a87a979eaca73ae193d7c73127f34d0a958403a9b5d6246e450289fd8c79adf09 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.0 + resolution: "@types/istanbul-lib-report@npm:3.0.0" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.1 + resolution: "@types/istanbul-reports@npm:3.0.1" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + languageName: node + linkType: hard + +"@types/jest@npm:^29.2.0": + version: 29.5.5 + resolution: "@types/jest@npm:29.5.5" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 56e55cde9949bcc0ee2fa34ce5b7c32c2bfb20e53424aa4ff3a210859eeaaa3fdf6f42f81a3f655238039cdaaaf108b054b7a8602f394e6c52b903659338d8c6 + languageName: node + linkType: hard + +"@types/jsdom@npm:^20.0.0": + version: 20.0.1 + resolution: "@types/jsdom@npm:20.0.1" + dependencies: + "@types/node": "*" + "@types/tough-cookie": "*" + parse5: ^7.0.0 + checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.11, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.13 + resolution: "@types/json-schema@npm:7.0.13" + checksum: 345df21a678fa72fb389f35f33de77833d09d4a142bb2bcb27c18690efa4cf70fc2876e43843cefb3fbdb9fcb12cd3e970a90936df30f53bbee899865ff605ab + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.2": + version: 1.2.2 + resolution: "@types/minimist@npm:1.2.2" + checksum: b8da83c66eb4aac0440e64674b19564d9d86c80ae273144db9681e5eeff66f238ade9515f5006ffbfa955ceff8b89ad2bd8ec577d7caee74ba101431fb07045d + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.4.8 + resolution: "@types/node@npm:20.4.8" + checksum: 86a3963c0c7af3410553d1dfa4b018a20b3cb3ab4d8e8ffe27408b6338c5de0374b0bf379bc705da2205b466daa751ccfe062f453ba9bde34fdb0e5163ca6a68 + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.1 + resolution: "@types/normalize-package-data@npm:2.4.1" + checksum: e87bccbf11f95035c89a132b52b79ce69a1e3652fe55962363063c9c0dae0fe2477ebc585e03a9652adc6f381d24ba5589cc5e51849df4ced3d3e004a7d40ed5 + languageName: node + linkType: hard + +"@types/parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "@types/parse-json@npm:4.0.0" + checksum: fd6bce2b674b6efc3db4c7c3d336bd70c90838e8439de639b909ce22f3720d21344f52427f1d9e57b265fcb7f6c018699b99e5e0c208a1a4823014269a6bf35b + languageName: node + linkType: hard + +"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.7": + version: 15.7.8 + resolution: "@types/prop-types@npm:15.7.8" + checksum: 61dfad79da8b1081c450bab83b77935df487ae1cdd4660ec7df6be8e74725c15fa45cf486ce057addc956ca4ae78300b97091e2a25061133d1b9a1440bc896ae + languageName: node + linkType: hard + +"@types/react-addons-linked-state-mixin@npm:^0.14.22": + version: 0.14.23 + resolution: "@types/react-addons-linked-state-mixin@npm:0.14.23" + dependencies: + "@types/react": "*" + checksum: 79571ccf972d6a25eb99453d6a09eaf2cdc09595e098bb1cdf698b7890cc625b860fdbd433163656c7b64ab2c4eff8b7b845a2c27774bb2680a3f9a37dc9eea7 + languageName: node + linkType: hard + +"@types/react-dom@npm:^18.2.0": + version: 18.2.10 + resolution: "@types/react-dom@npm:18.2.10" + dependencies: + "@types/react": "*" + checksum: ced70643d82dd9d165cd6d1a98ec7556daf77d8fdec1ed19badb744a2a2370a84cc109248667536d7f850409e85432c300ec9f8c87d46e066ad295ddf9b6ab03 + languageName: node + linkType: hard + +"@types/react-transition-group@npm:^4.4.6": + version: 4.4.7 + resolution: "@types/react-transition-group@npm:4.4.7" + dependencies: + "@types/react": "*" + checksum: 3b91486e7aa777a3787e773efce79a0fa9be4ec9e02d51ccda8c7532c5c5d84fbcefe248dacb4007293d85bf0794ac51603bb9cec360db81cf3657d2b7123fb9 + languageName: node + linkType: hard + +"@types/react-virtualized-auto-sizer@npm:^1.0.0": + version: 1.0.1 + resolution: "@types/react-virtualized-auto-sizer@npm:1.0.1" + dependencies: + "@types/react": "*" + checksum: 67eff0670a1991c2b16992274ada5f0b3f9d5c2d6209ef38e8f8ae2c0218211a3292882f5b7dd6f09519000dc20847629f049c9acc267e000626b7141e5927a6 + languageName: node + linkType: hard + +"@types/react-window@npm:^1.8.2": + version: 1.8.5 + resolution: "@types/react-window@npm:1.8.5" + dependencies: + "@types/react": "*" + checksum: 5f519e1402300d11b6e6595223feb6499f3227e38da166cbc565773cd7f71862abcf855b7835d391b5119fcfacdfba79d73a965b45f60a293fc1ff25986319ed + languageName: node + linkType: hard + +"@types/react@npm:*, @types/react@npm:^18.0.26": + version: 18.2.25 + resolution: "@types/react@npm:18.2.25" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: 177515cd44135d56191ec6c5c10edd490c96c175d37624d9c37bc2007c3abcf6cc2d2137d2a073d692cdc5129d5d5785bd60a6ddd315f695da5d8b989fa2afc5 + languageName: node + linkType: hard + +"@types/resize-observer-browser@npm:^0.1.7": + version: 0.1.7 + resolution: "@types/resize-observer-browser@npm:0.1.7" + checksum: 0377eaac8bb7a17b983b49a156006032380b459bfebefc54a5aa2f7f8a9786d2b60723e8837c61ef733330b478f4f26293e9edbdc8006238e4f80c878c56c988 + languageName: node + linkType: hard + +"@types/scheduler@npm:*": + version: 0.16.2 + resolution: "@types/scheduler@npm:0.16.2" + checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc + languageName: node + linkType: hard + +"@types/semver@npm:^7.5.0": + version: 7.5.0 + resolution: "@types/semver@npm:7.5.0" + checksum: 0a64b9b9c7424d9a467658b18dd70d1d781c2d6f033096a6e05762d20ebbad23c1b69b0083b0484722aabf35640b78ccc3de26368bcae1129c87e9df028a22e2 + languageName: node + linkType: hard + +"@types/source-list-map@npm:*": + version: 0.1.2 + resolution: "@types/source-list-map@npm:0.1.2" + checksum: fda8f37537aca9d3ed860d559289ab1dddb6897e642e6f53e909bbd18a7ac3129a8faa2a7d093847c91346cf09c86ef36e350c715406fba1f2271759b449adf6 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.1 + resolution: "@types/stack-utils@npm:2.0.1" + checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 + languageName: node + linkType: hard + +"@types/tough-cookie@npm:*": + version: 4.0.3 + resolution: "@types/tough-cookie@npm:4.0.3" + checksum: f201be1bbca2f2d3572032513cdb9825845114d2604a7f4091af848eeee3228a573cdc5e8082b04468a2848bb1d058f1adbb97db822e22c975ebd6fcd851a453 + languageName: node + linkType: hard + +"@types/webpack-sources@npm:^0.1.5": + version: 0.1.9 + resolution: "@types/webpack-sources@npm:0.1.9" + dependencies: + "@types/node": "*" + "@types/source-list-map": "*" + source-map: ^0.6.1 + checksum: bc09c584c7047e8aed29801a3981787dee3898e9e7a99891a362df114fcac3879eea5a00932314866a01b25220391839be09fe1487b16d4970ff4a7afd5b9725 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.0 + resolution: "@types/yargs-parser@npm:21.0.0" + checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 + languageName: node + linkType: hard + +"@types/yargs@npm:^15.0.0": + version: 15.0.15 + resolution: "@types/yargs@npm:15.0.15" + dependencies: + "@types/yargs-parser": "*" + checksum: 3420f6bcc508a895ef91858f8e6de975c710e4498cf6ed293f1174d3f1ad56edb4ab8481219bf6190f64a3d4115fab1d13ab3edc90acd54fba7983144040e446 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.26 + resolution: "@types/yargs@npm:17.0.26" + dependencies: + "@types/yargs-parser": "*" + checksum: 26611969674f4972080c3b22239d4579eaadc5287f95f7802f893c4a9bb292c141467bd70f1e66eb834486c63a23c4f10032618b3d2e7b1ddc05051d08db4078 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^6.1.0": + version: 6.1.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.1.0" + dependencies: + "@eslint-community/regexpp": ^4.5.1 + "@typescript-eslint/scope-manager": 6.1.0 + "@typescript-eslint/type-utils": 6.1.0 + "@typescript-eslint/utils": 6.1.0 + "@typescript-eslint/visitor-keys": 6.1.0 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.4 + natural-compare: ^1.4.0 + natural-compare-lite: ^1.4.0 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependencies: + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: e1f05d8d49041b47cdbea8fc80f87f03dc0f7273deb2f34f73661831572fe62976ab3780972496428ce6fa31d3f53236a4c90cd9948d45f5004631edbfa3d42a + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^6.1.0": + version: 6.1.0 + resolution: "@typescript-eslint/parser@npm:6.1.0" + dependencies: + "@typescript-eslint/scope-manager": 6.1.0 + "@typescript-eslint/types": 6.1.0 + "@typescript-eslint/typescript-estree": 6.1.0 + "@typescript-eslint/visitor-keys": 6.1.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: dc59cda4396ca09e3aa2bd5b99d8ef9526df56567d4a9b953668102116db975dfb2426c3369560a2b02e083d49e43b4cebb252144d175e900096eb0b17f7ae3c + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:6.1.0": + version: 6.1.0 + resolution: "@typescript-eslint/scope-manager@npm:6.1.0" + dependencies: + "@typescript-eslint/types": 6.1.0 + "@typescript-eslint/visitor-keys": 6.1.0 + checksum: 57c73b8713be79abebbcfef1d58f78a820ea88a5c37a44d2c9a76130216d9ee824134fae215dde794121cfaf1284370da77e1e5184ba71812aebb1a8cf39f325 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:6.1.0": + version: 6.1.0 + resolution: "@typescript-eslint/type-utils@npm:6.1.0" + dependencies: + "@typescript-eslint/typescript-estree": 6.1.0 + "@typescript-eslint/utils": 6.1.0 + debug: ^4.3.4 + ts-api-utils: ^1.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 83b2ffcf3aa297b60deb2e9ddd946b9c15cc55d0727dfc8a3447e8e5402428f6ee3fc67fb9d5d8ade25da4069ca77e23777caf02bcacd2a1e75b66cfc4d76579 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:6.1.0": + version: 6.1.0 + resolution: "@typescript-eslint/types@npm:6.1.0" + checksum: c1f55ebfda7af5e63077beb65fe5a82de7ae7afb913a4ebfb023f2889d5ec06f75b6ebca6ee45d6d205508a52fa5a6bf5821182c3e7e4400ac9304083b88f139 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:6.1.0": + version: 6.1.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.1.0" + dependencies: + "@typescript-eslint/types": 6.1.0 + "@typescript-eslint/visitor-keys": 6.1.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 42729b8952a78ff9fc7d3833e16de25f1a3502461ebe5d09a28fb4375c8e5978dde0dd1f8a7973bf7470ff9023cce84de82e968b02a09f54a0f753d21d9127e8 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:6.1.0": + version: 6.1.0 + resolution: "@typescript-eslint/utils@npm:6.1.0" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@types/json-schema": ^7.0.12 + "@types/semver": ^7.5.0 + "@typescript-eslint/scope-manager": 6.1.0 + "@typescript-eslint/types": 6.1.0 + "@typescript-eslint/typescript-estree": 6.1.0 + semver: ^7.5.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: eb47a6b56e142ca68231f0f43af68d4cf5161235943aaf19c268156e3e751e10dd8ea3e0e297a7c0796b9eb3c5268b3c659821b909799949b55a524707c82e13 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:6.1.0": + version: 6.1.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.1.0" + dependencies: + "@typescript-eslint/types": 6.1.0 + eslint-visitor-keys: ^3.4.1 + checksum: 21c7c9b9a52325e3b67c0015deb99a1603b19703af7c002e87f32e2d8f9910813985877ee7b589dc9938d308e3d082cf97c8ca43c2c95b86a919c426d8913439 + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/ast@npm:1.11.6" + dependencies: + "@webassemblyjs/helper-numbers": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + checksum: 38ef1b526ca47c210f30975b06df2faf1a8170b1636ce239fc5738fc231ce28389dd61ecedd1bacfc03cbe95b16d1af848c805652080cb60982836eb4ed2c6cf + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" + checksum: 29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" + checksum: e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-buffer@npm:1.11.6" + checksum: b14d0573bf680d22b2522e8a341ec451fddd645d1f9c6bd9012ccb7e587a2973b86ab7b89fe91e1c79939ba96095f503af04369a3b356c8023c13a5893221644 + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" + dependencies: + "@webassemblyjs/floating-point-hex-parser": 1.11.6 + "@webassemblyjs/helper-api-error": 1.11.6 + "@xtuc/long": 4.2.2 + checksum: f4b562fa219f84368528339e0f8d273ad44e047a07641ffcaaec6f93e5b76fd86490a009aa91a294584e1436d74b0a01fa9fde45e333a4c657b58168b04da424 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" + checksum: 3535ef4f1fba38de3475e383b3980f4bbf3de72bbb631c2b6584c7df45be4eccd62c6ff48b5edd3f1bcff275cfd605a37679ec199fc91fd0a7705d7f1e3972dc + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + checksum: b2cf751bf4552b5b9999d27bbb7692d0aca75260140195cb58ea6374d7b9c2dc69b61e10b211a0e773f66209c3ddd612137ed66097e3684d7816f854997682e9 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/ieee754@npm:1.11.6" + dependencies: + "@xtuc/ieee754": ^1.2.0 + checksum: 13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/leb128@npm:1.11.6" + dependencies: + "@xtuc/long": 4.2.2 + checksum: 7ea942dc9777d4b18a5ebfa3a937b30ae9e1d2ce1fee637583ed7f376334dd1d4274f813d2e250056cca803e0952def4b954913f1a3c9068bcd4ab4ee5143bf0 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/utf8@npm:1.11.6" + checksum: 807fe5b5ce10c390cfdd93e0fb92abda8aebabb5199980681e7c3743ee3306a75729bcd1e56a3903980e96c885ee53ef901fcbaac8efdfa480f9c0dae1d08713 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-edit@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/helper-wasm-section": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + "@webassemblyjs/wasm-opt": 1.11.6 + "@webassemblyjs/wasm-parser": 1.11.6 + "@webassemblyjs/wast-printer": 1.11.6 + checksum: 29ce75870496d6fad864d815ebb072395a8a3a04dc9c3f4e1ffdc63fc5fa58b1f34304a1117296d8240054cfdbc38aca88e71fb51483cf29ffab0a61ef27b481 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-gen@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/ieee754": 1.11.6 + "@webassemblyjs/leb128": 1.11.6 + "@webassemblyjs/utf8": 1.11.6 + checksum: a645a2eecbea24833c3260a249704a7f554ef4a94c6000984728e94bb2bc9140a68dfd6fd21d5e0bbb09f6dfc98e083a45760a83ae0417b41a0196ff6d45a23a + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-opt@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + "@webassemblyjs/wasm-parser": 1.11.6 + checksum: b4557f195487f8e97336ddf79f7bef40d788239169aac707f6eaa2fa5fe243557c2d74e550a8e57f2788e70c7ae4e7d32f7be16101afe183d597b747a3bdd528 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.11.6, @webassemblyjs/wasm-parser@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-parser@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-api-error": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/ieee754": 1.11.6 + "@webassemblyjs/leb128": 1.11.6 + "@webassemblyjs/utf8": 1.11.6 + checksum: 8200a8d77c15621724a23fdabe58d5571415cda98a7058f542e670ea965dd75499f5e34a48675184947c66f3df23adf55df060312e6d72d57908e3f049620d8a + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wast-printer@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@xtuc/long": 4.2.2 + checksum: d2fa6a4c427325ec81463e9c809aa6572af6d47f619f3091bf4c4a6fc34f1da3df7caddaac50b8e7a457f8784c62cd58c6311b6cb69b0162ccd8d4c072f79cf8 + languageName: node + linkType: hard + +"@webpack-cli/configtest@npm:^2.1.1": + version: 2.1.1 + resolution: "@webpack-cli/configtest@npm:2.1.1" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 9f9f9145c2d05471fc83d426db1df85cf49f329836b0c4b9f46b6948bed4b013464c00622b136d2a0a26993ce2306976682592245b08ee717500b1db45009a72 + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^2.0.2": + version: 2.0.2 + resolution: "@webpack-cli/info@npm:2.0.2" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 8f9a178afca5c82e113aed1efa552d64ee5ae4fdff63fe747c096a981ec74f18a5d07bd6e89bbe6715c3e57d96eea024a410e58977169489fe1df044c10dd94e + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^2.0.5": + version: 2.0.5 + resolution: "@webpack-cli/serve@npm:2.0.5" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 75f0e54681796d567a71ac3e2781d2901a8d8cf1cdfc82f261034dddac59a8343e8c3bc5e32b4bb9d6766759ba49fb29a5cd86ef1701d79c506fe886bb63ac75 + languageName: node + linkType: hard + +"@wojtekmaj/enzyme-adapter-react-17@npm:^0.8.0": + version: 0.8.0 + resolution: "@wojtekmaj/enzyme-adapter-react-17@npm:0.8.0" + dependencies: + "@wojtekmaj/enzyme-adapter-utils": ^0.2.0 + enzyme-shallow-equal: ^1.0.0 + has: ^1.0.0 + prop-types: ^15.7.0 + react-is: ^17.0.0 + react-test-renderer: ^17.0.0 + peerDependencies: + enzyme: ^3.0.0 + react: ^17.0.0-0 + react-dom: ^17.0.0-0 + checksum: aa9674f06f6db269b72168ebf46c4513938993479eb60bac30cb6183b5aca6108ade3d08af4f56c142cb219415480d0c4b454ba9452b85c32f711c806b39cd8c + languageName: node + linkType: hard + +"@wojtekmaj/enzyme-adapter-utils@npm:^0.2.0": + version: 0.2.0 + resolution: "@wojtekmaj/enzyme-adapter-utils@npm:0.2.0" + dependencies: + function.prototype.name: ^1.1.0 + has: ^1.0.0 + object.fromentries: ^2.0.0 + prop-types: ^15.7.0 + peerDependencies: + react: ^17.0.0-0 + checksum: 837741f1382acdb02ce304745eccfdcff03f1cae2a4fb833056a7a753308cd1182b0b32a10a04be6bfedaaab8f4acd5b458bfe0b9ebaa6119c4aaaba74a14ae4 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec + languageName: node + linkType: hard + +"abab@npm:^2.0.3, abab@npm:^2.0.6": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + languageName: node + linkType: hard + +"abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"acorn-globals@npm:^7.0.0": + version: 7.0.1 + resolution: "acorn-globals@npm:7.0.1" + dependencies: + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 + languageName: node + linkType: hard + +"acorn-import-assertions@npm:^1.9.0": + version: 1.9.0 + resolution: "acorn-import-assertions@npm:1.9.0" + peerDependencies: + acorn: ^8 + checksum: 944fb2659d0845c467066bdcda2e20c05abe3aaf11972116df457ce2627628a81764d800dd55031ba19de513ee0d43bb771bc679cc0eda66dc8b4fade143bc0c + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.0.2": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^8.1.0, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: ^1.2.1 + checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: ^3.1.3 + peerDependencies: + ajv: ^8.8.2 + checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4, ajv@npm:^6.12.5": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + 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 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.12.0, ajv@npm:^8.9.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + languageName: node + linkType: hard + +"all-contributors-cli@npm:^6.14.0": + version: 6.20.5 + resolution: "all-contributors-cli@npm:6.20.5" + dependencies: + "@babel/runtime": ^7.7.6 + async: ^3.1.0 + chalk: ^4.0.0 + didyoumean: ^1.2.1 + inquirer: ^7.3.3 + json-fixer: ^1.6.8 + lodash: ^4.11.2 + node-fetch: ^2.6.0 + pify: ^5.0.0 + yargs: ^15.0.1 + bin: + all-contributors: dist/cli.js + checksum: 39e514b2ae1a2cb7d3e10f63c65b3f0bcf045b856546c9ed2cb734ce8bca0ef4878c18c7123e3f43b4755842884dc0db42bae77bc1a692425f2b78501e40354c + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + languageName: node + linkType: hard + +"array-includes@npm:^3.1.5, array-includes@npm:^3.1.6": + version: 3.1.6 + resolution: "array-includes@npm:3.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + is-string: ^1.0.7 + checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"array.prototype.filter@npm:^1.0.0": + version: 1.0.1 + resolution: "array.prototype.filter@npm:1.0.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.0 + es-array-method-boxes-properly: ^1.0.0 + is-string: ^1.0.7 + checksum: 574b52dcebf2def7bedb05449b60e5e3819093fa77f88c3f87a9611361d2745c7aacde01cd3ed7accafd632ee1e0340b655dd26dc7c060429cb4566058e63134 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.2.3": + version: 1.3.0 + resolution: "array.prototype.flat@npm:1.3.0" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.2 + es-shim-unscopables: ^1.0.0 + checksum: 2a652b3e8dc0bebb6117e42a5ab5738af0203a14c27341d7bb2431467bdb4b348e2c5dc555dfcda8af0a5e4075c400b85311ded73861c87290a71a17c3e0a257 + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.1": + version: 1.3.1 + resolution: "array.prototype.flatmap@npm:1.3.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.1": + version: 1.1.1 + resolution: "array.prototype.tosorted@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.1.3 + checksum: 7923324a67e70a2fc0a6e40237405d92395e45ebd76f5cb89c2a5cf1e66b47aca6baacd0cd628ffd88830b90d47fff268071493d09c9ae123645613dac2c2ca3 + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 + languageName: node + linkType: hard + +"async@npm:^3.1.0": + version: 3.2.4 + resolution: "async@npm:3.2.4" + checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.5": + version: 1.0.5 + resolution: "available-typed-arrays@npm:1.0.5" + checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a + languageName: node + linkType: hard + +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" + dependencies: + "@jest/transform": ^29.7.0 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.6.3 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + 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 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 + languageName: node + linkType: hard + +"babel-plugin-macros@npm:^3.1.0": + version: 3.1.0 + resolution: "babel-plugin-macros@npm:3.1.0" + dependencies: + "@babel/runtime": ^7.12.5 + cosmiconfig: ^7.0.0 + resolve: ^1.19.0 + checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.5": + version: 0.4.5 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.5" + dependencies: + "@babel/compat-data": ^7.22.6 + "@babel/helper-define-polyfill-provider": ^0.4.2 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 33a8e06aa54e2858d211c743d179f0487b03222f9ca1bfd7c4865bca243fca942a3358cb75f6bb894ed476cbddede834811fbd6903ff589f055821146f053e1a + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.8.3": + version: 0.8.4 + resolution: "babel-plugin-polyfill-corejs3@npm:0.8.4" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.4.2 + core-js-compat: ^3.32.2 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 7243241a5b978b1335d51bcbd1248d6c4df88f6b3726706e71e0392f111c59bbf01118c85bb0ed42dce65e90e8fc768d19eda0a81a321cbe54abd3df9a285dc8 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.5.2": + version: 0.5.2 + resolution: "babel-plugin-polyfill-regenerator@npm:0.5.2" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.4.2 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: d962200f604016a9a09bc9b4aaf60a3db7af876bb65bcefaeac04d44ac9d9ec4037cf24ce117760cc141d7046b6394c7eb0320ba9665cb4a2ee64df2be187c93 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + 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 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" + dependencies: + babel-plugin-jest-hoist: ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"balanced-match@npm:^2.0.0": + version: 2.0.0 + resolution: "balanced-match@npm:2.0.0" + checksum: 9a5caad6a292c5df164cc6d0c38e0eedf9a1413f42e5fece733640949d74d0052cfa9587c1a1681f772147fb79be495121325a649526957fd75b3a216d1fbc68 + languageName: node + linkType: hard + +"big-integer@npm:^1.6.44": + version: 1.6.51 + resolution: "big-integer@npm:1.6.51" + checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 + languageName: node + linkType: hard + +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e + languageName: node + linkType: hard + +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 + languageName: node + linkType: hard + +"bplist-parser@npm:^0.2.0": + version: 0.2.0 + resolution: "bplist-parser@npm:0.2.0" + dependencies: + big-integer: ^1.6.44 + checksum: d5339dd16afc51de6c88f88f58a45b72ed6a06aa31f5557d09877575f220b7c1d3fbe375da0b62e6a10d4b8ed80523567e351f24014f5bc886ad523758142cdd + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"browserslist@npm:^4.14.5, browserslist@npm:^4.21.9, browserslist@npm:^4.22.1": + version: 4.22.1 + resolution: "browserslist@npm:4.22.1" + dependencies: + caniuse-lite: ^1.0.30001541 + electron-to-chromium: ^1.4.535 + node-releases: ^2.0.13 + update-browserslist-db: ^1.0.13 + bin: + browserslist: cli.js + checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862 + languageName: node + linkType: hard + +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: 2.x + checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-from@npm:1.x, buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"bundle-name@npm:^3.0.0": + version: 3.0.0 + resolution: "bundle-name@npm:3.0.0" + dependencies: + run-applescript: ^5.0.0 + checksum: edf2b1fbe6096ed32e7566947ace2ea937ee427391744d7510a2880c4b9a5b3543d3f6c551236a29e5c87d3195f8e2912516290e638c15bcbede7b37cc375615 + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.4 + resolution: "cacache@npm:17.1.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^7.0.3 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: ^1.1.1 + get-intrinsic: ^1.0.2 + checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camelcase-keys@npm:^7.0.0": + version: 7.0.2 + resolution: "camelcase-keys@npm:7.0.2" + dependencies: + camelcase: ^6.3.0 + map-obj: ^4.1.0 + quick-lru: ^5.1.1 + type-fest: ^1.2.1 + checksum: b5821cc48dd00e8398a30c5d6547f06837ab44de123f1b3a603d0a03399722b2fc67a485a7e47106eb02ef543c3b50c5ebaabc1242cde4b63a267c3258d2365b + languageName: node + linkType: hard + +"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0, camelcase@npm:^6.3.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001541": + version: 1.0.30001546 + resolution: "caniuse-lite@npm:1.0.30001546" + checksum: d3ef82f5ee94743002c5b2dd61c84342debcc94b2d5907b64ade3514ecfc4f20bbe86a6bc453fd6436d5fbcf6582e07405d7c2077565675a71c83adc238a11fa + languageName: node + linkType: hard + +"chalk@npm:5.2.0": + version: 5.2.0 + resolution: "chalk@npm:5.2.0" + checksum: 03d8060277de6cf2fd567dc25fcf770593eb5bb85f460ce443e49255a30ff1242edd0c90a06a03803b0466ff0687a939b41db1757bec987113e83de89a003caa + languageName: node + linkType: hard + +"chalk@npm:^2.3.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d + languageName: node + linkType: hard + +"cheerio-select@npm:^2.1.0": + version: 2.1.0 + resolution: "cheerio-select@npm:2.1.0" + dependencies: + boolbase: ^1.0.0 + css-select: ^5.1.0 + css-what: ^6.1.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + domutils: ^3.0.1 + checksum: 843d6d479922f28a6c5342c935aff1347491156814de63c585a6eb73baf7bb4185c1b4383a1195dca0f12e3946d737c7763bcef0b9544c515d905c5c44c5308b + languageName: node + linkType: hard + +"cheerio@npm:^1.0.0-rc.3": + version: 1.0.0-rc.12 + resolution: "cheerio@npm:1.0.0-rc.12" + dependencies: + cheerio-select: ^2.1.0 + dom-serializer: ^2.0.0 + domhandler: ^5.0.3 + domutils: ^3.0.1 + htmlparser2: ^8.0.1 + parse5: ^7.0.0 + parse5-htmlparser2-tree-adapter: ^7.0.0 + checksum: 5d4c1b7a53cf22d3a2eddc0aff70cf23cbb30d01a4c79013e703a012475c02461aa1fcd99127e8d83a02216386ed6942b2c8103845fd0812300dd199e6e7e054 + languageName: node + linkType: hard + +"child_process@npm:~1.0.2": + version: 1.0.2 + resolution: "child_process@npm:1.0.2" + checksum: bd814d82bc8c6e85ed6fb157878978121cd03b5296c09f6135fa3d081fd9a6a617a6d509c50397711df713af403331241a9c0397a7fad30672051485e156c2a1 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 + languageName: node + linkType: hard + +"ci-info@npm:^2.0.0": + version: 2.0.0 + resolution: "ci-info@npm:2.0.0" + checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.3 + resolution: "cjs-module-lexer@npm:1.2.3" + checksum: 5ea3cb867a9bb609b6d476cd86590d105f3cfd6514db38ff71f63992ab40939c2feb68967faa15a6d2b1f90daa6416b79ea2de486e9e2485a6f8b66a21b4fb0a + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: ^3.1.0 + checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 + languageName: node + linkType: hard + +"cli-truncate@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-truncate@npm:2.1.0" + dependencies: + slice-ansi: ^3.0.0 + string-width: ^4.2.0 + checksum: bf1e4e6195392dc718bf9cd71f317b6300dc4a9191d052f31046b8773230ece4fa09458813bf0e3455a5e68c0690d2ea2c197d14a8b85a7b5e01c97f4b5feb5d + languageName: node + linkType: hard + +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: ^5.0.0 + string-width: ^5.0.0 + checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a + languageName: node + linkType: hard + +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 + languageName: node + linkType: hard + +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^6.2.0 + checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + +"clsx@npm:^2.0.0": + version: 2.0.0 + resolution: "clsx@npm:2.0.0" + checksum: a2cfb2351b254611acf92faa0daf15220f4cd648bdf96ce369d729813b85336993871a4bf6978ddea2b81b5a130478339c20d9d0b5c6fc287e5147f0c059276e + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"colord@npm:^2.9.3": + version: 2.9.3 + resolution: "colord@npm:2.9.3" + checksum: 95d909bfbcfd8d5605cbb5af56f2d1ce2b323990258fd7c0d2eb0e6d3bb177254d7fb8213758db56bb4ede708964f78c6b992b326615f81a18a6aaf11d64c650 + languageName: node + linkType: hard + +"colorette@npm:^2.0.14, colorette@npm:^2.0.19": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"commander@npm:^10.0.0, commander@npm:^10.0.1": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 + languageName: node + linkType: hard + +"commander@npm:^2.11.0, commander@npm:^2.19.0, commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:^9.4.1": + version: 9.5.0 + resolution: "commander@npm:9.5.0" + checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade + languageName: node + linkType: hard + +"compute-gcd@npm:^1.2.1": + version: 1.2.1 + resolution: "compute-gcd@npm:1.2.1" + dependencies: + validate.io-array: ^1.0.3 + validate.io-function: ^1.0.2 + validate.io-integer-array: ^1.0.0 + checksum: 51cf33b75f7c8db5142fcb99a9d84a40260993fed8e02a7ab443834186c3ab99b3fd20b30ad9075a6a9d959d69df6da74dd3be8a59c78d9f2fe780ebda8242e1 + languageName: node + linkType: hard + +"compute-lcm@npm:^1.1.2": + version: 1.1.2 + resolution: "compute-lcm@npm:1.1.2" + dependencies: + compute-gcd: ^1.2.1 + validate.io-array: ^1.0.3 + validate.io-function: ^1.0.2 + validate.io-integer-array: ^1.0.0 + checksum: d499ab57dcb48e8d0fd233b99844a06d1cc56115602c920c586e998ebba60293731f5b6976e8a1e83ae6cbfe86716f62d9432e8d94913fed8bd8352f447dc917 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"convert-source-map@npm:^1.5.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.32.2": + version: 3.33.0 + resolution: "core-js-compat@npm:3.33.0" + dependencies: + browserslist: ^4.22.1 + checksum: 83ae54008c09b8e0ae3c59457039866c342c7e28b0d30eebb638a5b51c01432e63fe97695c90645cbc6a8b073a4f9a8b0e75f0818bbf8b4b054e01f4c17d3181 + languageName: node + linkType: hard + +"cosmiconfig@npm:^7.0.0": + version: 7.1.0 + resolution: "cosmiconfig@npm:7.1.0" + dependencies: + "@types/parse-json": ^4.0.0 + import-fresh: ^3.2.1 + parse-json: ^5.0.0 + path-type: ^4.0.0 + yaml: ^1.10.0 + checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f + languageName: node + linkType: hard + +"cosmiconfig@npm:^8.2.0": + version: 8.2.0 + resolution: "cosmiconfig@npm:8.2.0" + dependencies: + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + parse-json: ^5.0.0 + path-type: ^4.0.0 + checksum: 836d5d8efa750f3fb17b03d6ca74cd3154ed025dffd045304b3ef59637f662bde1e5dc88f8830080d180ec60841719cf4ea2ce73fb21ec694b16865c478ff297 + languageName: node + linkType: hard + +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + prompts: ^2.0.1 + bin: + create-jest: bin/create-jest.js + checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 + languageName: node + linkType: hard + +"crelt@npm:^1.0.5": + version: 1.0.6 + resolution: "crelt@npm:1.0.6" + checksum: dad842093371ad702afbc0531bfca2b0a8dd920b23a42f26e66dabbed9aad9acd5b9030496359545ef3937c3aced0fd4ac39f7a2d280a23ddf9eb7fdcb94a69f + languageName: node + linkType: hard + +"cross-fetch@npm:^3.0.4": + version: 3.1.5 + resolution: "cross-fetch@npm:3.1.5" + dependencies: + node-fetch: 2.6.7 + checksum: f6b8c6ee3ef993ace6277fd789c71b6acf1b504fd5f5c7128df4ef2f125a429e29cd62dc8c127523f04a5f2fa4771ed80e3f3d9695617f441425045f505cf3bb + languageName: node + linkType: hard + +"cross-spawn@npm:^6.0.5": + version: 6.0.5 + resolution: "cross-spawn@npm:6.0.5" + dependencies: + nice-try: ^1.0.4 + path-key: ^2.0.1 + semver: ^5.5.0 + shebang-command: ^1.2.0 + which: ^1.2.9 + checksum: f893bb0d96cd3d5751d04e67145bdddf25f99449531a72e82dcbbd42796bbc8268c1076c6b3ea51d4d455839902804b94bc45dfb37ecbb32ea8e54a6741c3ab9 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"css-functions-list@npm:^3.1.0": + version: 3.1.0 + resolution: "css-functions-list@npm:3.1.0" + checksum: 8a7c9d4ae57cb2f01500263e65a21372048d359ca7aa6430a32a736fe2a421decfebe45e579124b9a158ec68aba2eadcd733e568495a7698240d9607d31f681b + languageName: node + linkType: hard + +"css-loader@npm:^6.7.1": + version: 6.8.1 + resolution: "css-loader@npm:6.8.1" + dependencies: + icss-utils: ^5.1.0 + postcss: ^8.4.21 + postcss-modules-extract-imports: ^3.0.0 + postcss-modules-local-by-default: ^4.0.3 + postcss-modules-scope: ^3.0.0 + postcss-modules-values: ^4.0.0 + postcss-value-parser: ^4.2.0 + semver: ^7.3.8 + peerDependencies: + webpack: ^5.0.0 + checksum: 7c1784247bdbe76dc5c55fb1ac84f1d4177a74c47259942c9cfdb7a8e6baef11967a0bc85ac285f26bd26d5059decb848af8154a03fdb4f4894f41212f45eef3 + languageName: node + linkType: hard + +"css-select@npm:^5.1.0": + version: 5.1.0 + resolution: "css-select@npm:5.1.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^6.1.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + nth-check: ^2.0.1 + checksum: 2772c049b188d3b8a8159907192e926e11824aea525b8282981f72ba3f349cf9ecd523fdf7734875ee2cb772246c22117fc062da105b6d59afe8dcd5c99c9bda + languageName: node + linkType: hard + +"css-tree@npm:^2.3.1": + version: 2.3.1 + resolution: "css-tree@npm:2.3.1" + dependencies: + mdn-data: 2.0.30 + source-map-js: ^1.0.1 + checksum: 493cc24b5c22b05ee5314b8a0d72d8a5869491c1458017ae5ed75aeb6c3596637dbe1b11dac2548974624adec9f7a1f3a6cf40593dc1f9185eb0e8279543fbc0 + languageName: node + linkType: hard + +"css-vendor@npm:^2.0.8": + version: 2.0.8 + resolution: "css-vendor@npm:2.0.8" + dependencies: + "@babel/runtime": ^7.8.3 + is-in-browser: ^1.0.2 + checksum: 647cd4ea5e401c65c59376255aa2b708e92bf84fba9ce2b3ff5ecb94bf51d74ac374052b1cf9956ef7419b8ebf07fcea9a7683d2d2459127b2ca747ab5b98745 + languageName: node + linkType: hard + +"css-what@npm:^6.1.0": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 + languageName: node + linkType: hard + +"cssom@npm:^0.5.0": + version: 0.5.0 + resolution: "cssom@npm:0.5.0" + checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 + languageName: node + linkType: hard + +"cssom@npm:~0.3.6": + version: 0.3.8 + resolution: "cssom@npm:0.3.8" + checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 + languageName: node + linkType: hard + +"cssstyle@npm:^2.3.0": + version: 2.3.0 + resolution: "cssstyle@npm:2.3.0" + dependencies: + cssom: ~0.3.6 + checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 + languageName: node + linkType: hard + +"csstype@npm:3.0.10": + version: 3.0.10 + resolution: "csstype@npm:3.0.10" + checksum: 20a8fa324f2b33ddf94aa7507d1b6ab3daa6f3cc308888dc50126585d7952f2471de69b2dbe0635d1fdc31223fef8e070842691877e725caf456e2378685a631 + languageName: node + linkType: hard + +"csstype@npm:^3.0.2, csstype@npm:^3.1.2": + version: 3.1.2 + resolution: "csstype@npm:3.1.2" + checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5 + languageName: node + linkType: hard + +"data-urls@npm:^2.0.0": + version: 2.0.0 + resolution: "data-urls@npm:2.0.0" + dependencies: + abab: ^2.0.3 + whatwg-mimetype: ^2.3.0 + whatwg-url: ^8.0.0 + checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 + languageName: node + linkType: hard + +"data-urls@npm:^3.0.2": + version: 3.0.2 + resolution: "data-urls@npm:3.0.2" + dependencies: + abab: ^2.0.6 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: ^1.1.0 + map-obj: ^1.0.0 + checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"decamelize@npm:^5.0.0": + version: 5.0.1 + resolution: "decamelize@npm:5.0.1" + checksum: 7c3b1ed4b3e60e7fbc00a35fb248298527c1cdfe603e41dfcf05e6c4a8cb9efbee60630deb677ed428908fb4e74e322966c687a094d1478ddc9c3a74e9dc7140 + languageName: node + linkType: hard + +"decimal.js@npm:^10.4.2": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae + languageName: node + linkType: hard + +"dedent@npm:^1.0.0": + version: 1.5.1 + resolution: "dedent@npm:1.5.1" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: c3c300a14edf1bdf5a873f9e4b22e839d62490bc5c8d6169c1f15858a1a76733d06a9a56930e963d677a2ceeca4b6b0894cc5ea2f501aa382ca5b92af3413c2a + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + languageName: node + linkType: hard + +"default-browser-id@npm:^3.0.0": + version: 3.0.0 + resolution: "default-browser-id@npm:3.0.0" + dependencies: + bplist-parser: ^0.2.0 + untildify: ^4.0.0 + checksum: 279c7ad492542e5556336b6c254a4eaf31b2c63a5433265655ae6e47301197b6cfb15c595a6fdc6463b2ff8e1a1a1ed3cba56038a60e1527ba4ab1628c6b9941 + languageName: node + linkType: hard + +"default-browser@npm:^4.0.0": + version: 4.0.0 + resolution: "default-browser@npm:4.0.0" + dependencies: + bundle-name: ^3.0.0 + default-browser-id: ^3.0.0 + execa: ^7.1.1 + titleize: ^3.0.0 + checksum: 40c5af984799042b140300be5639c9742599bda76dc9eba5ac9ad5943c83dd36cebc4471eafcfddf8e0ec817166d5ba89d56f08e66a126c7c7908a179cead1a7 + languageName: node + linkType: hard + +"define-lazy-prop@npm:^3.0.0": + version: 3.0.0 + resolution: "define-lazy-prop@npm:3.0.0" + checksum: 54884f94caac0791bf6395a3ec530ce901cf71c47b0196b8754f3fd17edb6c0e80149c1214429d851873bb0d689dbe08dcedbb2306dc45c8534a5934723851b6 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": + version: 1.2.0 + resolution: "define-properties@npm:1.2.0" + dependencies: + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 + languageName: node + linkType: hard + +"didyoumean@npm:^1.2.1": + version: 1.2.2 + resolution: "didyoumean@npm:1.2.2" + checksum: d5d98719d58b3c2fa59663c4c42ba9716f1fd01245c31d5fce31915bd3aa26e6aac149788e007358f778ebbd68a2256eb5973e8ca6f221df221ba060115acf2e + languageName: node + linkType: hard + +"diff-match-patch@npm:^1.0.4": + version: 1.0.5 + resolution: "diff-match-patch@npm:1.0.5" + checksum: 841522d01b09cccbc4e4402cf61514a81b906349a7d97b67222390f2d35cf5df277cb23959eeed212d5e46afb5629cebab41b87918672c5a05c11c73688630e3 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"discontinuous-range@npm:1.0.0": + version: 1.0.0 + resolution: "discontinuous-range@npm:1.0.0" + checksum: 8ee88d7082445b6eadc7c03bebe6dc978f96760c45e9f65d16ca66174d9e086a9e3855ee16acf65625e1a07a846a17de674f02a5964a6aebe5963662baf8b5c8 + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: ^2.0.2 + checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"dom-helpers@npm:^5.0.1": + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" + dependencies: + "@babel/runtime": ^7.8.7 + csstype: ^3.0.2 + checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.2.0 + entities: ^2.0.0 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 + languageName: node + linkType: hard + +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + entities: ^4.2.0 + checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + languageName: node + linkType: hard + +"domexception@npm:^4.0.0": + version: 4.0.0 + resolution: "domexception@npm:4.0.0" + dependencies: + webidl-conversions: ^7.0.0 + checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: ^2.2.0 + checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa + languageName: node + linkType: hard + +"domhandler@npm:^5.0.1, domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: ^2.3.0 + checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c + languageName: node + linkType: hard + +"domutils@npm:^2.5.2": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: ^1.0.1 + domelementtype: ^2.2.0 + domhandler: ^4.2.0 + checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 + languageName: node + linkType: hard + +"domutils@npm:^3.0.1": + version: 3.0.1 + resolution: "domutils@npm:3.0.1" + dependencies: + dom-serializer: ^2.0.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.1 + checksum: 23aa7a840572d395220e173cb6263b0d028596e3950100520870a125af33ff819e6f609e1606d6f7d73bd9e7feb03bb404286e57a39063b5384c62b724d987b3 + languageName: node + linkType: hard + +"duplicate-package-checker-webpack-plugin@npm:^3.0.0": + version: 3.0.0 + resolution: "duplicate-package-checker-webpack-plugin@npm:3.0.0" + dependencies: + chalk: ^2.3.0 + find-root: ^1.0.0 + lodash: ^4.17.4 + semver: ^5.4.1 + checksum: d77be45cb72d79a429c64d8f8f7603fea681d182fb795459a3d4afa608faad9a923378a7e80c6855f465263e1983140b6fc3682bd0213228b8cd7906ab4b934d + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.535": + version: 1.4.542 + resolution: "electron-to-chromium@npm:1.4.542" + checksum: b5bfac82121ce91dbe71ab59fe760881c8c6786ea48814c7effeac92fbff59dffd7327be9a92d381e5c2b1620c824d0bb9a2b392bf6204278e4545f710c9fa98 + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.15.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 + languageName: node + linkType: hard + +"entities@npm:^4.2.0, entities@npm:^4.3.0, entities@npm:^4.4.0": + version: 4.4.0 + resolution: "entities@npm:4.4.0" + checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"envinfo@npm:^7.7.3": + version: 7.10.0 + resolution: "envinfo@npm:7.10.0" + bin: + envinfo: dist/cli.js + checksum: 05e81a5768c42cbd5c580dc3f274db3401facadd53e9bd52e2aa49dfbb5d8b26f6181c25a6652d79618a6994185bd2b1c137673101690b147f758e4e71d42f7d + languageName: node + linkType: hard + +"enzyme-shallow-equal@npm:^1.0.0, enzyme-shallow-equal@npm:^1.0.1": + version: 1.0.5 + resolution: "enzyme-shallow-equal@npm:1.0.5" + dependencies: + has: ^1.0.3 + object-is: ^1.1.5 + checksum: e18a728225b3ef501a223608955e2c8e915adf24dfe4d778bdbc89e4ecd80384723e9d44780176be1529f6b642e7837211f502bff89f62833d8f9cae027997e0 + languageName: node + linkType: hard + +"enzyme@npm:^3.7.0": + version: 3.11.0 + resolution: "enzyme@npm:3.11.0" + dependencies: + array.prototype.flat: ^1.2.3 + cheerio: ^1.0.0-rc.3 + enzyme-shallow-equal: ^1.0.1 + function.prototype.name: ^1.1.2 + has: ^1.0.3 + html-element-map: ^1.2.0 + is-boolean-object: ^1.0.1 + is-callable: ^1.1.5 + is-number-object: ^1.0.4 + is-regex: ^1.0.5 + is-string: ^1.0.5 + is-subset: ^0.1.1 + lodash.escape: ^4.0.1 + lodash.isequal: ^4.5.0 + object-inspect: ^1.7.0 + object-is: ^1.0.2 + object.assign: ^4.1.0 + object.entries: ^1.1.1 + object.values: ^1.1.1 + raf: ^3.4.1 + rst-selector-parser: ^2.2.3 + string.prototype.trim: ^1.2.1 + checksum: 69ae80049c3f405122b8e619f1cf8b04f32b3cc2b6134c29ed8c0f05e87a0b15080f1121096ec211954a710f4787300af9157078c863012de87eee16e98e64ea + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.20.4": + version: 1.21.2 + resolution: "es-abstract@npm:1.21.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + es-set-tostringtag: ^2.0.1 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.5 + get-intrinsic: ^1.2.0 + get-symbol-description: ^1.0.0 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 + is-callable: ^1.2.7 + is-negative-zero: ^2.0.2 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + is-string: ^1.0.7 + is-typed-array: ^1.1.10 + is-weakref: ^1.0.2 + object-inspect: ^1.12.3 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.4.3 + safe-regex-test: ^1.0.0 + string.prototype.trim: ^1.2.7 + string.prototype.trimend: ^1.0.6 + string.prototype.trimstart: ^1.0.6 + typed-array-length: ^1.0.4 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.9 + checksum: 037f55ee5e1cdf2e5edbab5524095a4f97144d95b94ea29e3611b77d852fd8c8a40e7ae7101fa6a759a9b9b1405f188c3c70928f2d3cd88d543a07fc0d5ad41a + languageName: node + linkType: hard + +"es-array-method-boxes-properly@npm:^1.0.0": + version: 1.0.0 + resolution: "es-array-method-boxes-properly@npm:1.0.0" + checksum: 2537fcd1cecf187083890bc6f5236d3a26bf39237433587e5bf63392e88faae929dbba78ff0120681a3f6f81c23fe3816122982c160d63b38c95c830b633b826 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.2.1": + version: 1.3.0 + resolution: "es-module-lexer@npm:1.3.0" + checksum: 48fd9f504a9d2a894126f75c8b7ccc6273a289983e9b67255f165bfd9ae765d50100218251e94e702ca567826905ea2f7b3b4a0c4d74d3ce99cce3a2a606a238 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.1": + version: 2.0.1 + resolution: "es-set-tostringtag@npm:2.0.1" + dependencies: + get-intrinsic: ^1.1.3 + has: ^1.0.3 + has-tostringtag: ^1.0.0 + checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0": + version: 1.0.0 + resolution: "es-shim-unscopables@npm:1.0.0" + dependencies: + has: ^1.0.3 + checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"escodegen@npm:^2.0.0": + version: 2.1.0 + resolution: "escodegen@npm:2.1.0" + dependencies: + esprima: ^4.0.1 + estraverse: ^5.2.0 + esutils: ^2.0.2 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^8.8.0": + version: 8.8.0 + resolution: "eslint-config-prettier@npm:8.8.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 1e94c3882c4d5e41e1dcfa2c368dbccbfe3134f6ac7d40101644d3bfbe3eb2f2ffac757f3145910b5eacf20c0e85e02b91293d3126d770cbf3dc390b3564681c + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^5.0.0": + version: 5.0.0 + resolution: "eslint-plugin-prettier@npm:5.0.0" + dependencies: + prettier-linter-helpers: ^1.0.0 + synckit: ^0.8.5 + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + checksum: 84e88744b9050f2d5ef31b94e85294dda16f3a53c2449f9d33eac8ae6264889b459bf35a68e438fb6b329c2a1d6491aac4bfa00d86317e7009de3dad0311bec6 + languageName: node + linkType: hard + +"eslint-plugin-react@npm:^7.33.0": + version: 7.33.0 + resolution: "eslint-plugin-react@npm:7.33.0" + dependencies: + array-includes: ^3.1.6 + array.prototype.flatmap: ^1.3.1 + array.prototype.tosorted: ^1.1.1 + doctrine: ^2.1.0 + estraverse: ^5.3.0 + jsx-ast-utils: ^2.4.1 || ^3.0.0 + minimatch: ^3.1.2 + object.entries: ^1.1.6 + object.fromentries: ^2.0.6 + object.hasown: ^1.1.2 + object.values: ^1.1.6 + prop-types: ^15.8.1 + resolve: ^2.0.0-next.4 + semver: ^6.3.1 + string.prototype.matchall: ^4.0.8 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: f3ce2978322efd3c698b802dabfad070109dd1935c4e468545992b82b5fb8257ea3ad56732330bb46643182a09560129a259b436952b3e2aa426947d3abd2b1a + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + +"eslint@npm:^8.36.0": + version: 8.50.0 + resolution: "eslint@npm:8.50.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.2 + "@eslint/js": 8.50.0 + "@humanwhocodes/config-array": ^0.11.11 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: 9ebfe5615dc84700000d218e32ddfdcfc227ca600f65f18e5541ec34f8902a00356a9a8804d9468fd6c8637a5ef6a3897291dad91ba6579d5b32ffeae5e31768 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.0 + human-signals: ^2.1.0 + is-stream: ^2.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^4.0.1 + onetime: ^5.1.2 + signal-exit: ^3.0.3 + strip-final-newline: ^2.0.0 + checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 + languageName: node + linkType: hard + +"execa@npm:^7.0.0, execa@npm:^7.1.1": + version: 7.1.1 + resolution: "execa@npm:7.1.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.1 + human-signals: ^4.3.0 + is-stream: ^3.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^5.1.0 + onetime: ^6.0.0 + signal-exit: ^3.0.7 + strip-final-newline: ^3.0.0 + checksum: 21fa46fc69314ace4068cf820142bdde5b643a5d89831c2c9349479c1555bff137a291b8e749e7efca36535e4e0a8c772c11008ca2e84d2cbd6ca141a3c8f937 + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 + languageName: node + linkType: hard + +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: ^0.7.0 + iconv-lite: ^0.4.24 + tmp: ^0.0.33 + checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.2.0 + resolution: "fast-diff@npm:1.2.0" + checksum: 1b5306eaa9e826564d9e5ffcd6ebd881eb5f770b3f977fcbf38f05c824e42172b53c79920e8429c54eb742ce15a0caf268b0fdd5b38f6de52234c4a8368131ae + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": + version: 3.3.0 + resolution: "fast-glob@npm:3.3.0" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 20df62be28eb5426fe8e40e0d05601a63b1daceb7c3d87534afcad91bdcf1e4b1743cf2d5247d6e225b120b46df0b9053a032b2691ba34ee121e033acd81f547 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fastest-levenshtein@npm:^1.0.12, fastest-levenshtein@npm:^1.0.16": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: a78d44285c9e2ae2c25f3ef0f8a73f332c1247b7ea7fb4a191e6bb51aa6ee1ef0dfb3ed113616dcdc7023e18e35a8db41f61c8d88988e877cf510df8edafbc71 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: ^1.0.4 + checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"filesize@npm:^10.0.7": + version: 10.0.7 + resolution: "filesize@npm:10.0.7" + checksum: acabe6ddcf0c06eb86a9b2ac0a93db48d2438037dce4f7ec5cf6ee32284a8d961b1efc251af1c05e7316ccf1e78c68cdc32655511745cc2580f9b8c309b523ce + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"find-package@npm:^1.0.0": + version: 1.0.0 + resolution: "find-package@npm:1.0.0" + dependencies: + parents: ^1.0.1 + checksum: 48840557446ffbd5d461080be9d55ee0858a493678b9fdf03512ce0f69b20572a990d2b9489f50f762164e6021fe9421d92b9d578779bf343af775a69185fc95 + languageName: node + linkType: hard + +"find-root@npm:^1.0.0, find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "find-root@npm:1.1.0" + checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.0.4 + resolution: "flat-cache@npm:3.0.4" + dependencies: + flatted: ^3.1.0 + rimraf: ^3.0.2 + checksum: 4fdd10ecbcbf7d520f9040dd1340eb5dfe951e6f0ecf2252edeec03ee68d989ec8b9a20f4434270e71bcfd57800dc09b3344fca3966b2eb8f613072c7d9a2365 + languageName: node + linkType: hard + +"flatted@npm:^3.1.0": + version: 3.2.7 + resolution: "flatted@npm:3.2.7" + checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"free-style@npm:3.1.0": + version: 3.1.0 + resolution: "free-style@npm:3.1.0" + checksum: 949258ae315deda48cac93ecd5f9a80f36e8a027e19ce2103598dc8d5ab60e963bbad5444b2a4990ddb746798dd188896f430285cf484afbf2141f7d75a191d8 + languageName: node + linkType: hard + +"fs-extra@npm:^10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.0, function.prototype.name@npm:^1.1.2, function.prototype.name@npm:^1.1.5": + version: 1.1.5 + resolution: "function.prototype.name@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.0 + functions-have-names: ^1.2.2 + checksum: acd21d733a9b649c2c442f067567743214af5fa248dbeee69d8278ce7df3329ea5abac572be9f7470b4ec1cd4d8f1040e3c5caccf98ebf2bf861a0deab735c27 + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"genversion@npm:^2.2.1": + version: 2.3.1 + resolution: "genversion@npm:2.3.1" + dependencies: + commander: ^2.11.0 + find-package: ^1.0.0 + mkdirp: ^0.5.1 + bin: + genversion: bin/genversion.js + checksum: 0773f89025b4d33de04a18aeb9cd75edcaae62475c1be30745cc8b990513b73aa3a8b52e4a0a4460577973c4adb9adda3b4fdbf461bb30cb250ecba5e3b510c2 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": + version: 1.2.1 + resolution: "get-intrinsic@npm:1.2.1" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.0": + version: 1.0.0 + resolution: "get-symbol-description@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.2.5": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:~7.1.6": + version: 7.1.7 + resolution: "glob@npm:7.1.7" + 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 + checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 + languageName: node + linkType: hard + +"global-modules@npm:^2.0.0": + version: 2.0.0 + resolution: "global-modules@npm:2.0.0" + dependencies: + global-prefix: ^3.0.0 + checksum: d6197f25856c878c2fb5f038899f2dca7cbb2f7b7cf8999660c0104972d5cfa5c68b5a0a77fa8206bb536c3903a4615665acb9709b4d80846e1bb47eaef65430 + languageName: node + linkType: hard + +"global-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "global-prefix@npm:3.0.0" + dependencies: + ini: ^1.3.5 + kind-of: ^6.0.2 + which: ^1.3.1 + checksum: 8a82fc1d6f22c45484a4e34656cc91bf021a03e03213b0035098d605bfc612d7141f1e14a21097e8a0413b4884afd5b260df0b6a25605ce9d722e11f1df2881d + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.20.0 + resolution: "globals@npm:13.20.0" + dependencies: + type-fest: ^0.20.2 + checksum: ad1ecf914bd051325faad281d02ea2c0b1df5d01bd94d368dcc5513340eac41d14b3c61af325768e3c7f8d44576e72780ec0b6f2d366121f8eec6e03c3a3b97a + languageName: node + linkType: hard + +"globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" + dependencies: + define-properties: ^1.1.3 + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + languageName: node + linkType: hard + +"globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"globjoin@npm:^0.1.4": + version: 0.1.4 + resolution: "globjoin@npm:0.1.4" + checksum: 0a47d88d566122d9e42da946453ee38b398e0021515ac6a95d13f980ba8c1e42954e05ee26cfcbffce1ac1ee094d0524b16ce1dd874ca52408d6db5c6d39985b + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + +"harmony-reflect@npm:^1.4.6": + version: 1.6.2 + resolution: "harmony-reflect@npm:1.6.2" + checksum: 2e5bae414cd2bfae5476147f9935dc69ee9b9a413206994dcb94c5b3208d4555da3d4313aff6fd14bd9991c1e3ef69cdda5c8fac1eb1d7afc064925839339b8c + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0": + version: 1.0.0 + resolution: "has-property-descriptors@npm:1.0.0" + dependencies: + get-intrinsic: ^1.1.1 + checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0": + version: 1.0.0 + resolution: "has-tostringtag@npm:1.0.0" + dependencies: + has-symbols: ^1.0.2 + checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"has@npm:^1.0.0, has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: ^1.1.1 + checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 + languageName: node + linkType: hard + +"hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: ^16.7.0 + checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: ^6.0.0 + checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 + languageName: node + linkType: hard + +"html-element-map@npm:^1.2.0": + version: 1.3.1 + resolution: "html-element-map@npm:1.3.1" + dependencies: + array.prototype.filter: ^1.0.0 + call-bind: ^1.0.2 + checksum: 7408da008d37bfa76b597e298ae0ed530258065deb29fbd73d40f7cbd123b654d1022a7a8cfbe713e57d90c5bef844399f5c8a46cde7d55c91d305024c921d08 + languageName: node + linkType: hard + +"html-encoding-sniffer@npm:^3.0.0": + version: 3.0.0 + resolution: "html-encoding-sniffer@npm:3.0.0" + dependencies: + whatwg-encoding: ^2.0.0 + checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + languageName: node + linkType: hard + +"html-tags@npm:^3.3.1": + version: 3.3.1 + resolution: "html-tags@npm:3.3.1" + checksum: b4ef1d5a76b678e43cce46e3783d563607b1d550cab30b4f511211564574770aa8c658a400b100e588bc60b8234e59b35ff72c7851cc28f3b5403b13a2c6cbce + languageName: node + linkType: hard + +"htmlparser2@npm:^6.0.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.0.0 + domutils: ^2.5.2 + entities: ^2.0.0 + checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e + languageName: node + linkType: hard + +"htmlparser2@npm:^8.0.1": + version: 8.0.1 + resolution: "htmlparser2@npm:8.0.1" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + entities: ^4.3.0 + checksum: 06d5c71e8313597722bc429ae2a7a8333d77bd3ab07ccb916628384b37332027b047f8619448d8f4a3312b6609c6ea3302a4e77435d859e9e686999e6699ca39 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 + languageName: node + linkType: hard + +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"husky@npm:^8.0.3": + version: 8.0.3 + resolution: "husky@npm:8.0.3" + bin: + husky: lib/bin.js + checksum: 837bc7e4413e58c1f2946d38fb050f5d7324c6f16b0fd66411ffce5703b294bd21429e8ba58711cd331951ee86ed529c5be4f76805959ff668a337dbfa82a1b0 + languageName: node + linkType: hard + +"hyphenate-style-name@npm:^1.0.3": + version: 1.0.4 + resolution: "hyphenate-style-name@npm:1.0.4" + checksum: 4f5bf4b055089754924babebaa23c17845937bcca6aee95d5d015f8fa1e6814279002bd6a9e541e3fac2cd02519fc76305396727066c57c8e21a7e73e7a12137 + languageName: node + linkType: hard + +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": + version: 5.1.0 + resolution: "icss-utils@npm:5.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 5c324d283552b1269cfc13a503aaaa172a280f914e5b81544f3803bc6f06a3b585fb79f66f7c771a2c052db7982c18bf92d001e3b47282e3abbbb4c4cc488d68 + languageName: node + linkType: hard + +"identity-obj-proxy@npm:^3.0.0": + version: 3.0.0 + resolution: "identity-obj-proxy@npm:3.0.0" + dependencies: + harmony-reflect: ^1.4.6 + checksum: 97559f8ea2aeaa1a880d279d8c49550dce01148321e00a2102cda5ddf9ce622fa1d7f3efc7bed63458af78889de888fdaebaf31c816312298bb3fdd0ef8aaf2c + languageName: node + linkType: hard + +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.2.4 + resolution: "ignore@npm:5.2.4" + checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"import-lazy@npm:^4.0.0": + version: 4.0.0 + resolution: "import-lazy@npm:4.0.0" + checksum: 22f5e51702134aef78890156738454f620e5fe7044b204ebc057c614888a1dd6fdf2ede0fdcca44d5c173fd64f65c985f19a51775b06967ef58cc3d26898df07 + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: ^4.2.0 + resolve-cwd: ^3.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: e466c27b6373440e6d84fbc19e750219ce25865cb82d578e41a6053d727e5520dc5725217d6eb1cc76005a1bb1696a0f106d84ce7ebda3033b963a38583fb3b3 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ini@npm:^1.3.5": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"inquirer@npm:^7.3.3": + version: 7.3.3 + resolution: "inquirer@npm:7.3.3" + dependencies: + ansi-escapes: ^4.2.1 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-width: ^3.0.0 + external-editor: ^3.0.3 + figures: ^3.0.0 + lodash: ^4.17.19 + mute-stream: 0.0.8 + run-async: ^2.4.0 + rxjs: ^6.6.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + through: ^2.3.6 + checksum: 4d387fc1eb6126acbd58cbdb9ad99d2887d181df86ab0c2b9abdf734e751093e2d5882c2b6dc7144d9ab16b7ab30a78a1d7f01fb6a2850a44aeb175d1e3f8778 + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.5": + version: 1.0.5 + resolution: "internal-slot@npm:1.0.5" + dependencies: + get-intrinsic: ^1.2.0 + has: ^1.0.3 + side-channel: ^1.0.4 + checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a + languageName: node + linkType: hard + +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.0 + is-typed-array: ^1.1.10 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: ^1.0.1 + checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.0.1, is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.1.5, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + +"is-ci@npm:^2.0.0": + version: 2.0.0 + resolution: "is-ci@npm:2.0.0" + dependencies: + ci-info: ^2.0.0 + bin: + is-ci: bin.js + checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.9.0": + version: 2.13.0 + resolution: "is-core-module@npm:2.13.0" + dependencies: + has: ^1.0.3 + checksum: 053ab101fb390bfeb2333360fd131387bed54e476b26860dc7f5a700bbf34a0ec4454f7c8c4d43e8a0030957e4b3db6e16d35e1890ea6fb654c833095e040355 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-in-browser@npm:^1.0.2, is-in-browser@npm:^1.1.3": + version: 1.1.3 + resolution: "is-in-browser@npm:1.1.3" + checksum: 178491f97f6663c0574565701b76f41633dbe065e4bd8d518ce017a8fa25e5109ecb6a3bd8bd55c0aba11b208f86b9f0f9c91f3664e148ebf618b74a74fcaf09 + languageName: node + linkType: hard + +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: ^3.0.0 + bin: + is-inside-container: cli.js + checksum: c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.2": + version: 2.0.2 + resolution: "is-negative-zero@npm:2.0.2" + checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c + languageName: node + linkType: hard + +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab + languageName: node + linkType: hard + +"is-regex@npm:^1.0.5, is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "is-shared-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + languageName: node + linkType: hard + +"is-subset@npm:^0.1.1": + version: 0.1.1 + resolution: "is-subset@npm:0.1.1" + checksum: 97b8d7852af165269b7495095691a6ce6cf20bdfa1f846f97b4560ee190069686107af4e277fbd93aa0845c4d5db704391460ff6e9014aeb73264ba87893df44 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: ^1.0.2 + checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.9": + version: 1.1.10 + resolution: "is-typed-array@npm:1.1.10" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + checksum: aac6ecb59d4c56a1cdeb69b1f129154ef462bbffe434cb8a8235ca89b42f258b7ae94073c41b3cb7bce37f6a1733ad4499f07882d5d5093a7ba84dfc4ebb8017 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"isomorphic.js@npm:^0.2.4": + version: 0.2.5 + resolution: "isomorphic.js@npm:0.2.5" + checksum: d8d1b083f05f3c337a06628b982ac3ce6db953bbef14a9de8ad49131250c3592f864b73c12030fdc9ef138ce97b76ef55c7d96a849561ac215b1b4b9d301c8e9 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + 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 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.1 + resolution: "istanbul-lib-instrument@npm:6.0.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^7.5.4 + checksum: fb23472e739cfc9b027cefcd7d551d5e7ca7ff2817ae5150fab99fe42786a7f7b56a29a2aa8309c37092e18297b8003f9c274f50ca4360949094d17fbac81472 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^4.0.0 + supports-color: ^7.1.0 + checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.6 + resolution: "istanbul-reports@npm:3.1.6" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 44c4c0582f287f02341e9720997f9e82c071627e1e862895745d5f52ec72c9b9f38e1d12370015d2a71dcead794f34c7732aaef3fab80a24bc617a21c3d911d6 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" + dependencies: + execa: ^5.0.0 + jest-util: ^29.7.0 + p-limit: ^3.1.0 + checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 + languageName: node + linkType: hard + +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^1.0.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.7.0 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + p-limit: ^3.1.0 + pretty-format: ^29.7.0 + pure-rand: ^6.0.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 + languageName: node + linkType: hard + +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" + dependencies: + "@jest/core": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + create-jest: ^29.7.0 + exit: ^0.1.2 + import-local: ^3.0.2 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 + languageName: node + linkType: hard + +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.7.0 + "@jest/types": ^29.6.3 + babel-jest: ^29.7.0 + chalk: ^4.0.0 + ci-info: ^3.2.0 + deepmerge: ^4.2.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-get-type: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-runner: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.7.0 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff + languageName: node + linkType: hard + +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" + dependencies: + detect-newline: ^3.0.0 + checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 + languageName: node + linkType: hard + +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + jest-util: ^29.7.0 + pretty-format: ^29.7.0 + checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c + languageName: node + linkType: hard + +"jest-environment-jsdom@npm:^29.3.0": + version: 29.7.0 + resolution: "jest-environment-jsdom@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/jsdom": ^20.0.0 + "@types/node": "*" + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + jsdom: ^20.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 559aac134c196fccc1dfc794d8fc87377e9f78e894bb13012b0831d88dec0abd7ece99abec69da564b8073803be4f04a9eb4f4d1bb80e29eec0cb252c254deb8 + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 + languageName: node + linkType: hard + +"jest-fetch-mock@npm:^3.0.0": + version: 3.0.3 + resolution: "jest-fetch-mock@npm:3.0.3" + dependencies: + cross-fetch: ^3.0.4 + promise-polyfill: ^8.1.3 + checksum: fb052f7e0ef1c8192a9c15efdd1b18d281ab68fc6b1648b30bff8880fe24418bdf12190ea79b1996932dc15417c3c01f5b2d77ef7104a7e7943e7cbe8d61071d + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 + languageName: node + linkType: hard + +"jest-junit@npm:^15.0.0": + version: 15.0.0 + resolution: "jest-junit@npm:15.0.0" + dependencies: + mkdirp: ^1.0.4 + strip-ansi: ^6.0.1 + uuid: ^8.3.2 + xml: ^1.0.1 + checksum: e8fe4d2f2ab843383ac41820a6fe495739d154ec435cd44ba590b44ec7fd62095676f3eef13f98392f81d4a3727ea58b4f4fad231fe367ac31243952b9ad716f + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" + dependencies: + jest-regex-util: ^29.6.3 + jest-snapshot: ^29.7.0 + checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 + languageName: node + linkType: hard + +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-pnp-resolver: ^1.2.2 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + resolve: ^1.20.0 + resolve.exports: ^2.0.0 + slash: ^3.0.0 + checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 + languageName: node + linkType: hard + +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/environment": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-leak-detector: ^29.7.0 + jest-message-util: ^29.7.0 + jest-resolve: ^29.7.0 + jest-runtime: ^29.7.0 + jest-util: ^29.7.0 + jest-watcher: ^29.7.0 + jest-worker: ^29.7.0 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb + languageName: node + linkType: hard + +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/globals": ^29.7.0 + "@jest/source-map": ^29.6.3 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + cjs-module-lexer: ^1.0.0 + collect-v8-coverage: ^1.0.0 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^29.7.0 + graceful-fs: ^4.2.9 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + natural-compare: ^1.4.0 + pretty-format: ^29.7.0 + semver: ^7.5.3 + checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad + languageName: node + linkType: hard + +"jest-util@npm:^26.1.0": + version: 26.6.2 + resolution: "jest-util@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + "@types/node": "*" + chalk: ^4.0.0 + graceful-fs: ^4.2.4 + is-ci: ^2.0.0 + micromatch: ^4.0.2 + checksum: 3c6a5fba05c4c6892cd3a9f66196ea8867087b77a5aa1a3f6cd349c785c3f1ca24abfd454664983aed1a165cab7846688e44fe8630652d666ba326b08625bc3d + languageName: node + linkType: hard + +"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + languageName: node + linkType: hard + +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + leven: ^3.1.0 + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae + languageName: node + linkType: hard + +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" + dependencies: + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.13.1 + jest-util: ^29.7.0 + string-length: ^4.0.1 + checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 + languageName: node + linkType: hard + +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" + dependencies: + "@types/node": "*" + jest-util: ^29.7.0 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 + languageName: node + linkType: hard + +"jest@npm:^29.2.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" + dependencies: + "@jest/core": ^29.7.0 + "@jest/types": ^29.6.3 + import-local: ^3.0.2 + jest-cli: ^29.7.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"jsdom@npm:^20.0.0": + version: 20.0.3 + resolution: "jsdom@npm:20.0.3" + dependencies: + abab: ^2.0.6 + acorn: ^8.8.1 + acorn-globals: ^7.0.0 + cssom: ^0.5.0 + cssstyle: ^2.3.0 + data-urls: ^3.0.2 + decimal.js: ^10.4.2 + domexception: ^4.0.0 + escodegen: ^2.0.0 + form-data: ^4.0.0 + html-encoding-sniffer: ^3.0.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.1 + is-potential-custom-element-name: ^1.0.1 + nwsapi: ^2.2.2 + parse5: ^7.1.1 + saxes: ^6.0.0 + symbol-tree: ^3.2.4 + tough-cookie: ^4.1.2 + w3c-xmlserializer: ^4.0.0 + webidl-conversions: ^7.0.0 + whatwg-encoding: ^2.0.0 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + ws: ^8.11.0 + xml-name-validator: ^4.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + languageName: node + linkType: hard + +"jsesc@npm:~0.5.0": + version: 0.5.0 + resolution: "jsesc@npm:0.5.0" + bin: + jsesc: bin/jsesc + checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 + languageName: node + linkType: hard + +"json-fixer@npm:^1.6.8": + version: 1.6.15 + resolution: "json-fixer@npm:1.6.15" + dependencies: + "@babel/runtime": ^7.18.9 + chalk: ^4.1.2 + pegjs: ^0.10.0 + checksum: ae805d5155ace57fd588a9ec129efd7324c3ef7f622988c66301eed9380da0acccdd35e9355b307c53051b246e2118d17a40775a2b13f19221574f5f662d4b15 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json-schema-compare@npm:^0.2.2": + version: 0.2.2 + resolution: "json-schema-compare@npm:0.2.2" + dependencies: + lodash: ^4.17.4 + checksum: dd6f2173857c8e3b77d6ebdfa05bd505bba5b08709ab46b532722f5d1c33b5fee1fc8f3c97d0c0d011db25f9f3b0baf7ab783bb5f55c32abd9f1201760e43c2c + languageName: node + linkType: hard + +"json-schema-merge-allof@npm:^0.8.1": + version: 0.8.1 + resolution: "json-schema-merge-allof@npm:0.8.1" + dependencies: + compute-lcm: ^1.1.2 + json-schema-compare: ^0.2.2 + lodash: ^4.17.20 + checksum: 82700f6ac77351959138d6b153d77375a8c29cf48d907241b85c8292dd77aabd8cb816400f2b0d17062c4ccc8893832ec4f664ab9c814927ef502e7a595ea873 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"json-stable-stringify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify@npm:1.0.1" + dependencies: + jsonify: ~0.0.0 + checksum: 65d6cbf0fca72a4136999f65f4401cf39a129f7aeff0fdd987ac3d3423a2113659294045fb8377e6e20d865cac32b1b8d70f3d87346c9786adcee60661d96ca5 + languageName: node + linkType: hard + +"json5@npm:2.x, json5@npm:^2.1.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jsonify@npm:~0.0.0": + version: 0.0.0 + resolution: "jsonify@npm:0.0.0" + checksum: d8d4ed476c116e6987a460dcb82f22284686caae9f498ac87b0502c1765ac1522f4f450a4cad4cc368d202fd3b27a3860735140a82867fc6d558f5f199c38bce + languageName: node + linkType: hard + +"jsonpointer@npm:^5.0.1": + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c + languageName: node + linkType: hard + +"jss-plugin-camel-case@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-camel-case@npm:10.10.0" + dependencies: + "@babel/runtime": ^7.3.1 + hyphenate-style-name: ^1.0.3 + jss: 10.10.0 + checksum: 693485b86f7a0e0bd0c16b8ddd057ca02a993fc088558c96501f9131e7e6261cc9f4b08047879a68441c688c40dceeb5219b1f15ade9043935aade4f37f5ca85 + languageName: node + linkType: hard + +"jss-plugin-default-unit@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-default-unit@npm:10.10.0" + dependencies: + "@babel/runtime": ^7.3.1 + jss: 10.10.0 + checksum: 6e56213830753ad80bca3824973a667106defaef698d5996d45d03a0e2a3e035b33cd257aa8015040c41bd6669e7598dce72c36099d7ae69db758a7b2ca453fa + languageName: node + linkType: hard + +"jss-plugin-global@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-global@npm:10.10.0" + dependencies: + "@babel/runtime": ^7.3.1 + jss: 10.10.0 + checksum: f3af4f40358e96cf89e0c7c84b6e441dc9b4d543cd6109fdf9314a9818fd780d252035f46cc526c3d3fb4393bc29effc6993cc22e04f4e67ec3c889ab760d580 + languageName: node + linkType: hard + +"jss-plugin-nested@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-nested@npm:10.10.0" + dependencies: + "@babel/runtime": ^7.3.1 + jss: 10.10.0 + tiny-warning: ^1.0.2 + checksum: 190094375972b68eb8f683387c74e97dc8347e7cc4f2fbfd40b3baf077dfde83d70e57be56744690d22537c0390e0a398714d86736df820c64e498df95f937de + languageName: node + linkType: hard + +"jss-plugin-props-sort@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-props-sort@npm:10.10.0" + dependencies: + "@babel/runtime": ^7.3.1 + jss: 10.10.0 + checksum: 274483444b6733bd58d229ebdcdb32b3c24172bc83cb2f6f8364926de19acd872758bcf06c7b3af11cf75504a67a7d67abba62b25081d144585a56b4df9512ba + languageName: node + linkType: hard + +"jss-plugin-rule-value-function@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-rule-value-function@npm:10.10.0" + dependencies: + "@babel/runtime": ^7.3.1 + jss: 10.10.0 + tiny-warning: ^1.0.2 + checksum: 009c9593b9be8b9f1030b797e58e3c233d90e034e5c68b0cabd25bffc7da965c69dc1ccb1bb6a542d72bb824df89036b2264fe564e8538320ef99febaf2882ee + languageName: node + linkType: hard + +"jss-plugin-vendor-prefixer@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-vendor-prefixer@npm:10.10.0" + dependencies: + "@babel/runtime": ^7.3.1 + css-vendor: ^2.0.8 + jss: 10.10.0 + checksum: 879b7233f9b0b571074dc2b88d97a05dbb949012ba2405f1481bbedd521167dc835133632adb3f2d8ffceddd337c8c13e3e8b1931590516c0664039598752dff + languageName: node + linkType: hard + +"jss@npm:10.10.0, jss@npm:^10.10.0": + version: 10.10.0 + resolution: "jss@npm:10.10.0" + dependencies: + "@babel/runtime": ^7.3.1 + csstype: ^3.0.2 + is-in-browser: ^1.1.3 + tiny-warning: ^1.0.2 + checksum: ecf71971df42729668c283e432e841349b7fdbe52e520f7704991cf4a738fd2451ec0feeb25c12cdc5addf7facecf838e74e62936fd461fb4c99f23d54a4792d + languageName: node + linkType: hard + +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0": + version: 3.3.3 + resolution: "jsx-ast-utils@npm:3.3.3" + dependencies: + array-includes: ^3.1.5 + object.assign: ^4.1.3 + checksum: a2ed78cac49a0f0c4be8b1eafe3c5257a1411341d8e7f1ac740debae003de04e5f6372bfcfbd9d082e954ffd99aac85bcda85b7c6bc11609992483f4cdc0f745 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"known-css-properties@npm:^0.27.0": + version: 0.27.0 + resolution: "known-css-properties@npm:0.27.0" + checksum: 8584fcf0526f984fe5a358af20200dec3b944373dd005dc23a3ce988895e1acd03e7d69c49533dda07d6d9b6d53990ed1119bd9d3e927f17545f8764c434a5cd + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"lib0@npm:^0.2.42, lib0@npm:^0.2.72": + version: 0.2.78 + resolution: "lib0@npm:0.2.78" + dependencies: + isomorphic.js: ^0.2.4 + bin: + 0gentesthtml: bin/gentesthtml.js + 0serve: bin/0serve.js + checksum: a9c90a9228e10e581bf416f4ecade967687d67e6ea3e822ef69e2628a77a2a0254ef7e2eb7e555d412f9e9467049b7fb760c079878f9a934dd85d2646a53d172 + languageName: node + linkType: hard + +"license-webpack-plugin@npm:^2.3.14": + version: 2.3.21 + resolution: "license-webpack-plugin@npm:2.3.21" + dependencies: + "@types/webpack-sources": ^0.1.5 + webpack-sources: ^1.2.0 + peerDependenciesMeta: + webpack: + optional: true + checksum: 6208bd2060d200fbffbcc89702c929d50c5a4a3f2158b046cf813b3f7f728bbbe4611b9fea2d67843bb5e7d64ad9122cc368a19ac73f5c4ad41765e6283bdc0c + languageName: node + linkType: hard + +"lilconfig@npm:2.1.0": + version: 2.1.0 + resolution: "lilconfig@npm:2.1.0" + checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"lint-staged@npm:^13.2.3": + version: 13.2.3 + resolution: "lint-staged@npm:13.2.3" + dependencies: + chalk: 5.2.0 + cli-truncate: ^3.1.0 + commander: ^10.0.0 + debug: ^4.3.4 + execa: ^7.0.0 + lilconfig: 2.1.0 + listr2: ^5.0.7 + micromatch: ^4.0.5 + normalize-path: ^3.0.0 + object-inspect: ^1.12.3 + pidtree: ^0.6.0 + string-argv: ^0.3.1 + yaml: ^2.2.2 + bin: + lint-staged: bin/lint-staged.js + checksum: ff51a1e33072f488b28b938ed47323816a1ff278ef6d0e5cbe1704b292773a6c8ce945b504eae3a9b5702917a979523a741f17023e16077bd5fa35be687cc067 + languageName: node + linkType: hard + +"listr2@npm:^5.0.7": + version: 5.0.8 + resolution: "listr2@npm:5.0.8" + dependencies: + cli-truncate: ^2.1.0 + colorette: ^2.0.19 + log-update: ^4.0.0 + p-map: ^4.0.0 + rfdc: ^1.3.0 + rxjs: ^7.8.0 + through: ^2.3.8 + wrap-ansi: ^7.0.0 + peerDependencies: + enquirer: ">= 2.3.0 < 3" + peerDependenciesMeta: + enquirer: + optional: true + checksum: 8be9f5632627c4df0dc33f452c98d415a49e5f1614650d3cab1b103c33e95f2a7a0e9f3e1e5de00d51bf0b4179acd8ff11b25be77dbe097cf3773c05e728d46c + languageName: node + linkType: hard + +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.2 + parse-json: ^4.0.0 + pify: ^3.0.0 + strip-bom: ^3.0.0 + checksum: 8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356 + languageName: node + linkType: hard + +"loader-runner@npm:^4.2.0": + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 + languageName: node + linkType: hard + +"loader-utils@npm:^2.0.0": + version: 2.0.4 + resolution: "loader-utils@npm:2.0.4" + dependencies: + big.js: ^5.2.2 + emojis-list: ^3.0.0 + json5: ^2.1.2 + checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 + languageName: node + linkType: hard + +"lodash.escape@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.escape@npm:4.0.1" + checksum: fcb54f457497256964d619d5cccbd80a961916fca60df3fe0fa3e7f052715c2944c0ed5aefb4f9e047d127d44aa2d55555f3350cb42c6549e9e293fb30b41e7f + languageName: node + linkType: hard + +"lodash.flattendeep@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.flattendeep@npm:4.4.0" + checksum: 8521c919acac3d4bcf0aaf040c1ca9cb35d6c617e2d72e9b4d51c9a58b4366622cd6077441a18be626c3f7b28227502b3bf042903d447b056ee7e0b11d45c722 + languageName: node + linkType: hard + +"lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 + languageName: node + linkType: hard + +"lodash.memoize@npm:4.x": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash.mergewith@npm:^4.6.1": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 + languageName: node + linkType: hard + +"lodash.truncate@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.truncate@npm:4.4.2" + checksum: b463d8a382cfb5f0e71c504dcb6f807a7bd379ff1ea216669aa42c52fc28c54e404bfbd96791aa09e6df0de2c1d7b8f1b7f4b1a61f324d38fe98bc535aeee4f5 + languageName: node + linkType: hard + +"lodash@npm:4.x, lodash@npm:^4.11.2, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-update@npm:^4.0.0": + version: 4.0.0 + resolution: "log-update@npm:4.0.0" + dependencies: + ansi-escapes: ^4.3.0 + cli-cursor: ^3.1.0 + slice-ansi: ^4.0.0 + wrap-ansi: ^6.2.0 + checksum: ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2 + languageName: node + linkType: hard + +"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.0 + resolution: "lru-cache@npm:10.0.0" + checksum: 18f101675fe283bc09cda0ef1e3cc83781aeb8373b439f086f758d1d91b28730950db785999cd060d3c825a8571c03073e8c14512b6655af2188d623031baf50 + languageName: node + linkType: hard + +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: ^7.5.3 + checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + languageName: node + linkType: hard + +"make-error@npm:1.x": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed + languageName: node + linkType: hard + +"map-obj@npm:^4.1.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e + languageName: node + linkType: hard + +"markdown-to-jsx@npm:^7.3.2": + version: 7.3.2 + resolution: "markdown-to-jsx@npm:7.3.2" + peerDependencies: + react: ">= 0.14.0" + checksum: 8885c6343b71570b0a7ec16cd85a49b853a830234790ee7430e2517ea5d8d361ff138bd52147f650790f3e7b3a28a15c755fc16f8856dd01ddf09a6161782e06 + languageName: node + linkType: hard + +"mathml-tag-names@npm:^2.1.3": + version: 2.1.3 + resolution: "mathml-tag-names@npm:2.1.3" + checksum: 1201a25a137d6b9e328facd67912058b8b45b19a6c4cc62641c9476195da28a275ca6e0eca070af5378b905c2b11abc1114676ba703411db0b9ce007de921ad0 + languageName: node + linkType: hard + +"mdn-data@npm:2.0.30": + version: 2.0.30 + resolution: "mdn-data@npm:2.0.30" + checksum: d6ac5ac7439a1607df44b22738ecf83f48e66a0874e4482d6424a61c52da5cde5750f1d1229b6f5fa1b80a492be89465390da685b11f97d62b8adcc6e88189aa + languageName: node + linkType: hard + +"memoize-one@npm:>=3.1.1 <6": + version: 5.2.1 + resolution: "memoize-one@npm:5.2.1" + checksum: a3cba7b824ebcf24cdfcd234aa7f86f3ad6394b8d9be4c96ff756dafb8b51c7f71320785fbc2304f1af48a0467cbbd2a409efc9333025700ed523f254cb52e3d + languageName: node + linkType: hard + +"memorystream@npm:^0.3.1": + version: 0.3.1 + resolution: "memorystream@npm:0.3.1" + checksum: f18b42440d24d09516d01466c06adf797df7873f0d40aa7db02e5fb9ed83074e5e65412d0720901d7069363465f82dc4f8bcb44f0cde271567a61426ce6ca2e9 + languageName: node + linkType: hard + +"meow@npm:^10.1.5": + version: 10.1.5 + resolution: "meow@npm:10.1.5" + dependencies: + "@types/minimist": ^1.2.2 + camelcase-keys: ^7.0.0 + decamelize: ^5.0.0 + decamelize-keys: ^1.1.0 + hard-rejection: ^2.1.0 + minimist-options: 4.1.0 + normalize-package-data: ^3.0.2 + read-pkg-up: ^8.0.0 + redent: ^4.0.0 + trim-newlines: ^4.0.2 + type-fest: ^1.2.2 + yargs-parser: ^20.2.9 + checksum: dd5f0caa4af18517813547dc66741dcbf52c4c23def5062578d39b11189fd9457aee5c1f2263a5cd6592a465023df8357e8ac876b685b64dbcf545e3f66c23a7 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 + languageName: node + linkType: hard + +"min-indent@npm:^1.0.1": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + +"mini-css-extract-plugin@npm:^2.7.0": + version: 2.7.6 + resolution: "mini-css-extract-plugin@npm:2.7.6" + dependencies: + schema-utils: ^4.0.0 + peerDependencies: + webpack: ^5.0.0 + checksum: be6f7cefc6275168eb0a6b8fe977083a18c743c9612c9f00e6c1a62c3393ca7960e93fba1a7ebb09b75f36a0204ad087d772c1ef574bc29c90c0e8175a3c0b83 + languageName: node + linkType: hard + +"mini-svg-data-uri@npm:^1.4.4": + version: 1.4.4 + resolution: "mini-svg-data-uri@npm:1.4.4" + bin: + mini-svg-data-uri: cli.js + checksum: 997f1fbd8d59a70f03761e18626d335197a3479cb9d1ff75678e4b64b864d32a0b8fc18115eabde035e5299b8b4a354a78e57dd6ac10f9d604162a6170898d09 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: ^1.0.1 + is-plain-obj: ^1.1.0 + kind-of: ^6.0.3 + checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e + languageName: node + linkType: hard + +"minimist@npm:^1.2.6, minimist@npm:~1.2.0": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:1.x, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: ^1.2.6 + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + languageName: node + linkType: hard + +"moo@npm:^0.5.0": + version: 0.5.1 + resolution: "moo@npm:0.5.1" + checksum: 2d8c013f1f9aad8e5c7a9d4a03dbb4eecd91b9fe5e9446fbc7561fd38d4d161c742434acff385722542fe7b360fce9c586da62442379e62e4158ad49c7e1a6b7 + languageName: node + linkType: hard + +"ms@npm:2.1.2, ms@npm:^2.0.0": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"mute-stream@npm:0.0.8": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.6": + version: 3.3.6 + resolution: "nanoid@npm:3.3.6" + bin: + nanoid: bin/nanoid.cjs + checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 + languageName: node + linkType: hard + +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"nbdime-jupyterlab@npm:^3.0.0-alpha.0": + version: 3.0.0-alpha.0 + resolution: "nbdime-jupyterlab@npm:3.0.0-alpha.0" + dependencies: + "@jupyterlab/apputils": ^4.0.0 + "@jupyterlab/codeeditor": ^4.0.0 + "@jupyterlab/coreutils": ^6.0.0 + "@jupyterlab/nbformat": ^4.0.0 + "@jupyterlab/notebook": ^4.0.0 + "@jupyterlab/rendermime": ^4.0.0 + "@jupyterlab/services": ^7.0.0 + "@jupyterlab/settingregistry": ^4.0.0 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/widgets": ^2.3.0 + nbdime: ^7.0.0-alpha.0 + checksum: 70c14dfcb92bc7a12c022d31e3a8fb968115dc0f75eb2a92f5a4a0d128ab32d9e4daad88f790f00a22df6b6b6f011871fd45a845414472d493e13722d6dbb421 + languageName: node + linkType: hard + +"nbdime@npm:^7.0.0-alpha.0": + version: 7.0.0-alpha.0 + resolution: "nbdime@npm:7.0.0-alpha.0" + dependencies: + "@codemirror/lang-markdown": ^6.1.1 + "@codemirror/language": ^6.6.0 + "@codemirror/legacy-modes": ^6.3.2 + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.14.0 + "@jupyterlab/codeeditor": ^4.0.0 + "@jupyterlab/codemirror": ^4.0.0 + "@jupyterlab/coreutils": ^6.0.0 + "@jupyterlab/nbformat": ^4.0.0 + "@jupyterlab/outputarea": ^4.0.0 + "@jupyterlab/rendermime": ^4.0.0 + "@jupyterlab/services": ^7.0.0 + "@jupyterlab/translation": ^4.0.0 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/dragdrop": ^2.1.3 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + json-stable-stringify: ^1.0.1 + checksum: b6769fc8251c83d2bd8f377c8544676515efa9f7f219de84fa5d2af7eefc96f018b8478c2a82441761caf0b45f414865a76be9b6ec2c43690317dc75b524e96a + languageName: node + linkType: hard + +"nearley@npm:^2.7.10": + version: 2.20.1 + resolution: "nearley@npm:2.20.1" + dependencies: + commander: ^2.19.0 + moo: ^0.5.0 + railroad-diagrams: ^1.0.0 + randexp: 0.4.6 + bin: + nearley-railroad: bin/nearley-railroad.js + nearley-test: bin/nearley-test.js + nearley-unparse: bin/nearley-unparse.js + nearleyc: bin/nearleyc.js + checksum: 42c2c330c13c7991b48221c5df00f4352c2f8851636ae4d1f8ca3c8e193fc1b7668c78011d1cad88cca4c1c4dc087425420629c19cc286d7598ec15533aaef26 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7, node-fetch@npm:^2.6.0": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^11.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-releases@npm:^2.0.13": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3 + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + languageName: node + linkType: hard + +"normalize-package-data@npm:^3.0.2": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: ^4.0.1 + is-core-module: ^2.5.0 + semver: ^7.3.4 + validate-npm-package-license: ^3.0.1 + checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npm-run-all@npm:^4.1.5": + version: 4.1.5 + resolution: "npm-run-all@npm:4.1.5" + dependencies: + ansi-styles: ^3.2.1 + chalk: ^2.4.1 + cross-spawn: ^6.0.5 + memorystream: ^0.3.1 + minimatch: ^3.0.4 + pidtree: ^0.3.0 + read-pkg: ^3.0.0 + shell-quote: ^1.6.1 + string.prototype.padend: ^3.0.0 + bin: + npm-run-all: bin/npm-run-all/index.js + run-p: bin/run-p/index.js + run-s: bin/run-s/index.js + checksum: 373b72c6a36564da13c1642c1fd9bb4dcc756bce7a3648f883772f02661095319820834ff813762d2fee403e9b40c1cd27c8685807c107440f10eb19c006d4a0 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.1.0 + resolution: "npm-run-path@npm:5.1.0" + dependencies: + path-key: ^4.0.0 + checksum: dc184eb5ec239d6a2b990b43236845332ef12f4e0beaa9701de724aa797fe40b6bbd0157fb7639d24d3ab13f5d5cf22d223a19c6300846b8126f335f788bee66 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" + dependencies: + boolbase: ^1.0.0 + checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 + languageName: node + linkType: hard + +"nwsapi@npm:^2.2.2": + version: 2.2.7 + resolution: "nwsapi@npm:2.2.7" + checksum: cab25f7983acec7e23490fec3ef7be608041b460504229770e3bfcf9977c41d6fe58f518994d3bd9aa3a101f501089a3d4a63536f4ff8ae4b8c4ca23bdbfda4e + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-inspect@npm:^1.12.3, object-inspect@npm:^1.7.0, object-inspect@npm:^1.9.0": + version: 1.12.3 + resolution: "object-inspect@npm:1.12.3" + checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db + languageName: node + linkType: hard + +"object-is@npm:^1.0.2, object-is@npm:^1.1.5": + version: 1.1.5 + resolution: "object-is@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + +"object.assign@npm:^4.1.0, object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": + version: 4.1.4 + resolution: "object.assign@npm:4.1.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + languageName: node + linkType: hard + +"object.entries@npm:^1.1.1, object.entries@npm:^1.1.6": + version: 1.1.6 + resolution: "object.entries@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28 + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.0, object.fromentries@npm:^2.0.6": + version: 2.0.6 + resolution: "object.fromentries@npm:2.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 453c6d694180c0c30df451b60eaf27a5b9bca3fb43c37908fd2b78af895803dc631242bcf05582173afa40d8d0e9c96e16e8874b39471aa53f3ac1f98a085d85 + languageName: node + linkType: hard + +"object.hasown@npm:^1.1.2": + version: 1.1.2 + resolution: "object.hasown@npm:1.1.2" + dependencies: + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: b936572536db0cdf38eb30afd2f1026a8b6f2cc5d2c4497c9d9bbb01eaf3e980dead4fd07580cfdd098e6383e5a9db8212d3ea0c6bdd2b5e68c60aa7e3b45566 + languageName: node + linkType: hard + +"object.values@npm:^1.1.1, object.values@npm:^1.1.6": + version: 1.1.6 + resolution: "object.values@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: ^4.0.0 + checksum: 0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 + languageName: node + linkType: hard + +"open@npm:^9.1.0": + version: 9.1.0 + resolution: "open@npm:9.1.0" + dependencies: + default-browser: ^4.0.0 + define-lazy-prop: ^3.0.0 + is-inside-container: ^1.0.0 + is-wsl: ^2.2.0 + checksum: 3993c0f61d51fed8ac290e99c9c3cf45d3b6cfb3e2aa2b74cafd312c3486c22fd81df16ac8f3ab91dd8a4e3e729a16fc2480cfc406c4833416cf908acf1ae7c9 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" + dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parents@npm:^1.0.1": + version: 1.0.1 + resolution: "parents@npm:1.0.1" + dependencies: + path-platform: ~0.11.15 + checksum: 094fc817d5e8d94e9f9d38c2618a2822f2960b7a268183a36326c5d1cf6ff32f97b1158b0f9b32ab126573996dfe6db104feda6d26e8531d762d178ef4488fc8 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: ^1.3.1 + json-parse-better-errors: ^1.0.1 + checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + 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 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse-srcset@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-srcset@npm:1.0.2" + checksum: 3a0380380c6082021fcce982f0b89fb8a493ce9dfd7d308e5e6d855201e80db8b90438649b31fdd82a3d6089a8ca17dccddaa2b730a718389af4c037b8539ebf + languageName: node + linkType: hard + +"parse5-htmlparser2-tree-adapter@npm:^7.0.0": + version: 7.0.0 + resolution: "parse5-htmlparser2-tree-adapter@npm:7.0.0" + dependencies: + domhandler: ^5.0.2 + parse5: ^7.0.0 + checksum: fc5d01e07733142a1baf81de5c2a9c41426c04b7ab29dd218acb80cd34a63177c90aff4a4aee66cf9f1d0aeecff1389adb7452ad6f8af0a5888e3e9ad6ef733d + languageName: node + linkType: hard + +"parse5@npm:^7.0.0, parse5@npm:^7.1.1": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + languageName: node + linkType: hard + +"path-browserify@npm:^1.0.0": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-platform@npm:~0.11.15": + version: 0.11.15 + resolution: "path-platform@npm:0.11.15" + checksum: 239f2eae720531ff5a48837de68f94ebd7cf6cd2bf295b39beb97c5bafc34a34a683b62f9f5ad5ca5e78d71d7d44c29e7c56373c1c8473ab128a4e648bb898f0 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: ^3.0.0 + checksum: 735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"pegjs@npm:^0.10.0": + version: 0.10.0 + resolution: "pegjs@npm:0.10.0" + bin: + pegjs: bin/pegjs + checksum: 65d184ca0e1823ec0a3e7f384d7fd771bcbbc7abf460c82c9704022c1fa325425dc9007c92982b951879c3c9d4c39bf5cd6d99690e0540ff5016c04ca1ecd17e + languageName: node + linkType: hard + +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pidtree@npm:^0.3.0": + version: 0.3.1 + resolution: "pidtree@npm:0.3.1" + bin: + pidtree: bin/pidtree.js + checksum: eb49025099f1af89a4696f7673351421f13420f3397b963c901fe23a1c9c2ff50f4750321970d4472c0ffbb065e4a6c3c27f75e226cc62284b19e21d32ce7012 + languageName: node + linkType: hard + +"pidtree@npm:^0.6.0": + version: 0.6.0 + resolution: "pidtree@npm:0.6.0" + bin: + pidtree: bin/pidtree.js + checksum: 8fbc073ede9209dd15e80d616e65eb674986c93be49f42d9ddde8dbbd141bb53d628a7ca4e58ab5c370bb00383f67d75df59a9a226dede8fa801267a7030c27a + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde + languageName: node + linkType: hard + +"pify@npm:^5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb + languageName: node + linkType: hard + +"pirates@npm:^4.0.4": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"postcss-modules-extract-imports@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-extract-imports@npm:3.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 4b65f2f1382d89c4bc3c0a1bdc5942f52f3cb19c110c57bd591ffab3a5fee03fcf831604168205b0c1b631a3dce2255c70b61aaae3ef39d69cd7eb450c2552d2 + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^4.0.3": + version: 4.0.3 + resolution: "postcss-modules-local-by-default@npm:4.0.3" + dependencies: + icss-utils: ^5.0.0 + postcss-selector-parser: ^6.0.2 + postcss-value-parser: ^4.1.0 + peerDependencies: + postcss: ^8.1.0 + checksum: 2f8083687f3d6067885f8863dd32dbbb4f779cfcc7e52c17abede9311d84faf6d3ed8760e7c54c6380281732ae1f78e5e56a28baf3c271b33f450a11c9e30485 + languageName: node + linkType: hard + +"postcss-modules-scope@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-scope@npm:3.0.0" + dependencies: + postcss-selector-parser: ^6.0.4 + peerDependencies: + postcss: ^8.1.0 + checksum: 330b9398dbd44c992c92b0dc612c0626135e2cc840fee41841eb61247a6cfed95af2bd6f67ead9dd9d0bb41f5b0367129d93c6e434fa3e9c58ade391d9a5a138 + languageName: node + linkType: hard + +"postcss-modules-values@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-values@npm:4.0.0" + dependencies: + icss-utils: ^5.0.0 + peerDependencies: + postcss: ^8.1.0 + checksum: f7f2cdf14a575b60e919ad5ea52fed48da46fe80db2733318d71d523fc87db66c835814940d7d05b5746b0426e44661c707f09bdb83592c16aea06e859409db6 + languageName: node + linkType: hard + +"postcss-resolve-nested-selector@npm:^0.1.1": + version: 0.1.1 + resolution: "postcss-resolve-nested-selector@npm:0.1.1" + checksum: b08fb76ab092a09ee01328bad620a01dcb445ac5eb02dd0ed9ed75217c2f779ecb3bf99a361c46e695689309c08c09f1a1ad7354c8d58c2c2c40d364657fcb08 + languageName: node + linkType: hard + +"postcss-safe-parser@npm:^6.0.0": + version: 6.0.0 + resolution: "postcss-safe-parser@npm:6.0.0" + peerDependencies: + postcss: ^8.3.3 + checksum: 06c733eaad83a3954367e7ee02ddfe3796e7a44d4299ccf9239f40964a4daac153c7d77613f32964b5a86c0c6c2f6167738f31d578b73b17cb69d0c4446f0ebe + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": + version: 6.0.13 + resolution: "postcss-selector-parser@npm:6.0.13" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: f89163338a1ce3b8ece8e9055cd5a3165e79a15e1c408e18de5ad8f87796b61ec2d48a2902d179ae0c4b5de10fccd3a325a4e660596549b040bc5ad1b465f096 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f + languageName: node + linkType: hard + +"postcss@npm:^8.3.11, postcss@npm:^8.4.21, postcss@npm:^8.4.24": + version: 8.4.31 + resolution: "postcss@npm:8.4.31" + dependencies: + nanoid: ^3.3.6 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: ^1.1.2 + checksum: 00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 + languageName: node + linkType: hard + +"prettier@npm:^3.0.0": + version: 3.0.0 + resolution: "prettier@npm:3.0.0" + bin: + prettier: bin/prettier.cjs + checksum: 6a832876a1552dc58330d2467874e5a0b46b9ccbfc5d3531eb69d15684743e7f83dc9fbd202db6270446deba9c82b79d24383d09924c462b457136a759425e33 + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"promise-polyfill@npm:^8.1.3": + version: 8.2.3 + resolution: "promise-polyfill@npm:8.2.3" + checksum: f320278bab8b8ce32f0e2f377d75aabe35c90a79f92b3e001db084d635da1fb8740ba8a26b5c1c2b4cdca5a4c988f9b6b3eb30f0b151d0362d3d9c1675024a8f + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"prop-types@npm:^15.6.2, prop-types@npm:^15.7.0, prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + +"psl@npm:^1.1.33": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + languageName: node + linkType: hard + +"pure-rand@npm:^6.0.0": + version: 6.0.4 + resolution: "pure-rand@npm:6.0.4" + checksum: e1c4e69f8bf7303e5252756d67c3c7551385cd34d94a1f511fe099727ccbab74c898c03a06d4c4a24a89b51858781057b83ebbfe740d984240cdc04fead36068 + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed + languageName: node + linkType: hard + +"raf@npm:^3.4.1": + version: 3.4.1 + resolution: "raf@npm:3.4.1" + dependencies: + performance-now: ^2.1.0 + checksum: 50ba284e481c8185dbcf45fc4618ba3aec580bb50c9121385d5698cb6012fe516d2015b1df6dd407a7b7c58d44be8086108236affbce1861edd6b44637c8cd52 + languageName: node + linkType: hard + +"railroad-diagrams@npm:^1.0.0": + version: 1.0.0 + resolution: "railroad-diagrams@npm:1.0.0" + checksum: 9e312af352b5ed89c2118edc0c06cef2cc039681817f65266719606e4e91ff6ae5374c707cc9033fe29a82c2703edf3c63471664f97f0167c85daf6f93496319 + languageName: node + linkType: hard + +"randexp@npm:0.4.6": + version: 0.4.6 + resolution: "randexp@npm:0.4.6" + dependencies: + discontinuous-range: 1.0.0 + ret: ~0.1.10 + checksum: 3c0d440a3f89d6d36844aa4dd57b5cdb0cab938a41956a16da743d3a3578ab32538fc41c16cc0984b6938f2ae4cbc0216967e9829e52191f70e32690d8e3445d + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + scheduler: ^0.23.0 + peerDependencies: + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc + languageName: node + linkType: hard + +"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.2.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"react-is@npm:^16.13.1, react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^17.0.0, react-is@npm:^17.0.2": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 + languageName: node + linkType: hard + +"react-shallow-renderer@npm:^16.13.1": + version: 16.15.0 + resolution: "react-shallow-renderer@npm:16.15.0" + dependencies: + object-assign: ^4.1.1 + react-is: ^16.12.0 || ^17.0.0 || ^18.0.0 + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: 6052c7e3e9627485120ebd8257f128aad8f56386fe8d42374b7743eac1be457c33506d153c7886b4e32923c0c352d402ab805ef9ca02dbcd8393b2bdeb6e5af8 + languageName: node + linkType: hard + +"react-test-renderer@npm:^17.0.0": + version: 17.0.2 + resolution: "react-test-renderer@npm:17.0.2" + dependencies: + object-assign: ^4.1.1 + react-is: ^17.0.2 + react-shallow-renderer: ^16.13.1 + scheduler: ^0.20.2 + peerDependencies: + react: 17.0.2 + checksum: e6b5c6ed2a0bde2c34f1ab9523ff9bc4c141a271daf730d6b852374e83acc0155d58ab71a318251e953ebfa65b8bebb9c5dce3eba1ccfcbef7cc4e1e8261c401 + languageName: node + linkType: hard + +"react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "react-transition-group@npm:4.4.5" + dependencies: + "@babel/runtime": ^7.5.5 + dom-helpers: ^5.0.1 + loose-envify: ^1.4.0 + prop-types: ^15.6.2 + peerDependencies: + react: ">=16.6.0" + react-dom: ">=16.6.0" + checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 + languageName: node + linkType: hard + +"react-virtualized-auto-sizer@npm:^1.0.2": + version: 1.0.7 + resolution: "react-virtualized-auto-sizer@npm:1.0.7" + peerDependencies: + react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc + react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc + checksum: 7f2f013c422771828c6613c7890f792aa90a033ea2b41c489c67ca2c6793eefa94d25232c1050fdf69cdd626fad9e3821c5003d45fa6fc831184cd09232023c2 + languageName: node + linkType: hard + +"react-window@npm:^1.8.5": + version: 1.8.7 + resolution: "react-window@npm:1.8.7" + dependencies: + "@babel/runtime": ^7.0.0 + memoize-one: ">=3.1.1 <6" + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: 1e122c29224781e70359978287a2e850ccdf509cd71ba16b16ea258725687a62f5c16ab69f52f732b4ed20df583196dbe2a04804f3e4a176bb3e62f3fc910452 + languageName: node + linkType: hard + +"react@npm:^18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b + languageName: node + linkType: hard + +"read-pkg-up@npm:^8.0.0": + version: 8.0.0 + resolution: "read-pkg-up@npm:8.0.0" + dependencies: + find-up: ^5.0.0 + read-pkg: ^6.0.0 + type-fest: ^1.0.1 + checksum: fe4c80401656b40b408884457fffb5a8015c03b1018cfd8e48f8d82a5e9023e24963603aeb2755608d964593e046c15b34d29b07d35af9c7aa478be81805209c + languageName: node + linkType: hard + +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: ^4.0.0 + normalize-package-data: ^2.3.2 + path-type: ^3.0.0 + checksum: 398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6 + languageName: node + linkType: hard + +"read-pkg@npm:^6.0.0": + version: 6.0.0 + resolution: "read-pkg@npm:6.0.0" + dependencies: + "@types/normalize-package-data": ^2.4.0 + normalize-package-data: ^3.0.2 + parse-json: ^5.2.0 + type-fest: ^1.0.1 + checksum: 0cebdff381128e923815c643074a87011070e5fc352bee575d327d6485da3317fab6d802a7b03deeb0be7be8d3ad1640397b3d5d2f044452caf4e8d1736bf94f + languageName: node + linkType: hard + +"readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: ^1.20.0 + checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 + languageName: node + linkType: hard + +"redent@npm:^4.0.0": + version: 4.0.0 + resolution: "redent@npm:4.0.0" + dependencies: + indent-string: ^5.0.0 + strip-indent: ^4.0.0 + checksum: 6944e7b1d8f3fd28c2515f5c605b9f7f0ea0f4edddf41890bbbdd4d9ee35abb7540c3b278f03ff827bd278bb6ff4a5bd8692ca406b748c5c1c3ce7355e9fbf8f + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.1.0": + version: 10.1.0 + resolution: "regenerate-unicode-properties@npm:10.1.0" + dependencies: + regenerate: ^1.4.2 + checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.0 + resolution: "regenerator-runtime@npm:0.14.0" + checksum: 1c977ad82a82a4412e4f639d65d22be376d3ebdd30da2c003eeafdaaacd03fc00c2320f18120007ee700900979284fc78a9f00da7fb593f6e6eeebc673fba9a3 + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.15.2": + version: 0.15.2 + resolution: "regenerator-transform@npm:0.15.2" + dependencies: + "@babel/runtime": ^7.8.4 + checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.4.3": + version: 1.5.0 + resolution: "regexp.prototype.flags@npm:1.5.0" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + functions-have-names: ^1.2.3 + checksum: c541687cdbdfff1b9a07f6e44879f82c66bbf07665f9a7544c5fd16acdb3ec8d1436caab01662d2fbcad403f3499d49ab0b77fbc7ef29ef961d98cc4bc9755b4 + languageName: node + linkType: hard + +"regexpu-core@npm:^5.3.1": + version: 5.3.2 + resolution: "regexpu-core@npm:5.3.2" + dependencies: + "@babel/regjsgen": ^0.8.0 + regenerate: ^1.4.2 + regenerate-unicode-properties: ^10.1.0 + regjsparser: ^0.9.1 + unicode-match-property-ecmascript: ^2.0.0 + unicode-match-property-value-ecmascript: ^2.1.0 + checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 + languageName: node + linkType: hard + +"regjsparser@npm:^0.9.1": + version: 0.9.1 + resolution: "regjsparser@npm:0.9.1" + dependencies: + jsesc: ~0.5.0 + bin: + regjsparser: bin/parser + checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0": + version: 1.22.6 + resolution: "resolve@npm:1.22.6" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: d13bf66d4e2ee30d291491f16f2fa44edd4e0cefb85d53249dd6f93e70b2b8c20ec62f01b18662e3cd40e50a7528f18c4087a99490048992a3bb954cf3201a5b + languageName: node + linkType: hard + +"resolve@npm:^2.0.0-next.4": + version: 2.0.0-next.4 + resolution: "resolve@npm:2.0.0-next.4" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: c438ac9a650f2030fd074219d7f12ceb983b475da2d89ad3d6dd05fbf6b7a0a8cd37d4d10b43cb1f632bc19f22246ab7f36ebda54d84a29bfb2910a0680906d3 + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin": + version: 1.22.6 + resolution: "resolve@patch:resolve@npm%3A1.22.6#~builtin::version=1.22.6&hash=c3c19d" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 9d3b3c67aefd12cecbe5f10ca4d1f51ea190891096497c43f301b086883b426466918c3a64f1bbf1788fabb52b579d58809614006c5d0b49186702b3b8fb746a + languageName: node + linkType: hard + +"resolve@patch:resolve@^2.0.0-next.4#~builtin": + version: 2.0.0-next.4 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#~builtin::version=2.0.0-next.4&hash=c3c19d" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 4bf9f4f8a458607af90518ff73c67a4bc1a38b5a23fef2bb0ccbd45e8be89820a1639b637b0ba377eb2be9eedfb1739a84cde24fe4cd670c8207d8fea922b011 + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 + languageName: node + linkType: hard + +"ret@npm:~0.1.10": + version: 0.1.15 + resolution: "ret@npm:0.1.15" + checksum: d76a9159eb8c946586567bd934358dfc08a36367b3257f7a3d7255fdd7b56597235af23c6afa0d7f0254159e8051f93c918809962ebd6df24ca2a83dbe4d4151 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rfdc@npm:^1.3.0": + version: 1.3.0 + resolution: "rfdc@npm:1.3.0" + checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32 + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"rimraf@npm:^5.0.1": + version: 5.0.1 + resolution: "rimraf@npm:5.0.1" + dependencies: + glob: ^10.2.5 + bin: + rimraf: dist/cjs/src/bin.js + checksum: bafce85391349a2d960847980bf9b5caa2a8887f481af630f1ea27e08288217293cec72d75e9a2ba35495c212789f66a7f3d23366ba6197026ab71c535126857 + languageName: node + linkType: hard + +"rst-selector-parser@npm:^2.2.3": + version: 2.2.3 + resolution: "rst-selector-parser@npm:2.2.3" + dependencies: + lodash.flattendeep: ^4.4.0 + nearley: ^2.7.10 + checksum: fbfb2f6a7d4c9b3e013ef555ac06e5dba444e0d37dc959b94c507b6c34093ef10fe98141338d9cac58e5ae0f9453a5ef7f85af3d5e6386b237c1b3552debe4a0 + languageName: node + linkType: hard + +"run-applescript@npm:^5.0.0": + version: 5.0.0 + resolution: "run-applescript@npm:5.0.0" + dependencies: + execa: ^5.0.0 + checksum: d00c2dbfa5b2d774de7451194b8b125f40f65fc183de7d9dcae97f57f59433586d3c39b9001e111c38bfa24c3436c99df1bb4066a2a0c90d39a8c4cd6889af77 + languageName: node + linkType: hard + +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"rxjs@npm:^6.6.0": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: ^1.9.0 + checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b + languageName: node + linkType: hard + +"rxjs@npm:^7.8.0": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: ^2.1.0 + checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.1.0": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sanitize-html@npm:~2.7.3": + version: 2.7.3 + resolution: "sanitize-html@npm:2.7.3" + dependencies: + deepmerge: ^4.2.2 + escape-string-regexp: ^4.0.0 + htmlparser2: ^6.0.0 + is-plain-object: ^5.0.0 + parse-srcset: ^1.0.2 + postcss: ^8.3.11 + checksum: 2399d1fdbbc3a263fb413c1fe1971b3dc2b51abc6cc5cb49490624539d1c57a8fe31e2b21408c118e2a957f4e673e3169b1f9a5807654408f17b130a9d78aed7 + languageName: node + linkType: hard + +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: ^2.2.0 + checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b + languageName: node + linkType: hard + +"scheduler@npm:^0.20.2": + version: 0.20.2 + resolution: "scheduler@npm:0.20.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + checksum: c4b35cf967c8f0d3e65753252d0f260271f81a81e427241295c5a7b783abf4ea9e905f22f815ab66676f5313be0a25f47be582254db8f9241b259213e999b8fc + languageName: node + linkType: hard + +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" + dependencies: + loose-envify: ^1.1.0 + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a + languageName: node + linkType: hard + +"schema-utils@npm:^2.7.0": + version: 2.7.1 + resolution: "schema-utils@npm:2.7.1" + dependencies: + "@types/json-schema": ^7.0.5 + ajv: ^6.12.4 + ajv-keywords: ^3.5.2 + checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b + languageName: node + linkType: hard + +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" + dependencies: + "@types/json-schema": ^7.0.8 + ajv: ^6.12.5 + ajv-keywords: ^3.5.2 + checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 + languageName: node + linkType: hard + +"schema-utils@npm:^4.0.0": + version: 4.2.0 + resolution: "schema-utils@npm:4.2.0" + dependencies: + "@types/json-schema": ^7.0.9 + ajv: ^8.9.0 + ajv-formats: ^2.1.1 + ajv-keywords: ^5.1.0 + checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.4.1, semver@npm:^5.5.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + +"semver@npm:7.x, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.1": + version: 6.0.1 + resolution: "serialize-javascript@npm:6.0.1" + dependencies: + randombytes: ^2.1.0 + checksum: 3c4f4cb61d0893b988415bdb67243637333f3f574e9e9cc9a006a2ced0b390b0b3b44aef8d51c951272a9002ec50885eefdc0298891bc27eb2fe7510ea87dc4f + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: ^1.0.0 + checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"shell-quote@npm:^1.6.1": + version: 1.7.3 + resolution: "shell-quote@npm:1.7.3" + checksum: aca58e73a3a5d933d02e0bdddedc53ee14f7c2ec264f97ac915b9d4482d077a38e422aa664631d60a672cd3cdb4054eb2e6c0303f54882453dacb6483e482d34 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.4 + resolution: "side-channel@npm:1.0.4" + dependencies: + call-bind: ^1.0.0 + get-intrinsic: ^1.0.2 + object-inspect: ^1.9.0 + checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.0.2 + resolution: "signal-exit@npm:4.0.2" + checksum: 41f5928431cc6e91087bf0343db786a6313dd7c6fd7e551dbc141c95bb5fb26663444fd9df8ea47c5d7fc202f60aa7468c3162a9365cbb0615fc5e1b1328fe31 + languageName: node + linkType: hard + +"simulate-event@npm:~1.4.0": + version: 1.4.0 + resolution: "simulate-event@npm:1.4.0" + dependencies: + xtend: ^4.0.1 + checksum: d2cbb62f7a0c22aa1964e4df7a01b717c3c437df40dde70112fc06046cb8c7a03ca582571754653abc7c8c06df43d28c57b4f0bdf7a587094e4d6282357eb506 + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"slice-ansi@npm:^3.0.0": + version: 3.0.0 + resolution: "slice-ansi@npm:3.0.0" + dependencies: + ansi-styles: ^4.0.0 + astral-regex: ^2.0.0 + is-fullwidth-code-point: ^3.0.0 + checksum: 5ec6d022d12e016347e9e3e98a7eb2a592213a43a65f1b61b74d2c78288da0aded781f665807a9f3876b9daa9ad94f64f77d7633a0458876c3a4fdc4eb223f24 + languageName: node + linkType: hard + +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" + dependencies: + ansi-styles: ^4.0.0 + astral-regex: ^2.0.0 + is-fullwidth-code-point: ^3.0.0 + checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: ^6.0.0 + is-fullwidth-code-point: ^4.0.0 + checksum: 7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"source-list-map@npm:^2.0.0": + version: 2.0.1 + resolution: "source-list-map@npm:2.0.1" + checksum: 806efc6f75e7cd31e4815e7a3aaf75a45c704871ea4075cb2eb49882c6fca28998f44fc5ac91adb6de03b2882ee6fb02f951fdc85e6a22b338c32bfe19557938 + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.1, source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c + languageName: node + linkType: hard + +"source-map-loader@npm:^1.0.2, source-map-loader@npm:~1.0.2": + version: 1.0.2 + resolution: "source-map-loader@npm:1.0.2" + dependencies: + data-urls: ^2.0.0 + iconv-lite: ^0.6.2 + loader-utils: ^2.0.0 + schema-utils: ^2.7.0 + source-map: ^0.6.1 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 0360b536e904f8fea452d0e122b9199661765229dc62a4b8093cc9d14e985f2ddd146355ede6d11acdd0b9bf4639b364e2526afcf9d3218ed45af63aa5eb053f + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map@npm:^0.5.7": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.3.0 + resolution: "spdx-exceptions@npm:2.3.0" + checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.13 + resolution: "spdx-license-ids@npm:3.0.13" + checksum: 3469d85c65f3245a279fa11afc250c3dca96e9e847f2f79d57f466940c5bb8495da08a542646086d499b7f24a74b8d0b42f3fc0f95d50ff99af1f599f6360ad7 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"string-argv@npm:^0.3.1": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 8703ad3f3db0b2641ed2adbb15cf24d3945070d9a751f9e74a924966db9f325ac755169007233e8985a39a6a292f14d4fee20482989b89b96e473c4221508a0f + languageName: node + linkType: hard + +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: ^1.0.2 + strip-ansi: ^6.0.0 + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string.prototype.matchall@npm:^4.0.8": + version: 4.0.8 + resolution: "string.prototype.matchall@npm:4.0.8" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + has-symbols: ^1.0.3 + internal-slot: ^1.0.3 + regexp.prototype.flags: ^1.4.3 + side-channel: ^1.0.4 + checksum: 952da3a818de42ad1c10b576140a5e05b4de7b34b8d9dbf00c3ac8c1293e9c0f533613a39c5cda53e0a8221f2e710bc2150e730b1c2278d60004a8a35726efb6 + languageName: node + linkType: hard + +"string.prototype.padend@npm:^3.0.0": + version: 3.1.3 + resolution: "string.prototype.padend@npm:3.1.3" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.1 + checksum: ef9ee0542c17975629bc6d21497e8faaa142d873e9f07fb65de2a955df402a1eac45cbed375045a759501e9d4ef80e589e11f0e12103c20df0770e47f6b59bc7 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.1, string.prototype.trim@npm:^1.2.7": + version: 1.2.7 + resolution: "string.prototype.trim@npm:1.2.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 05b7b2d6af63648e70e44c4a8d10d8cc457536df78b55b9d6230918bde75c5987f6b8604438c4c8652eb55e4fc9725d2912789eb4ec457d6995f3495af190c09 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimend@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimstart@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 + languageName: node + linkType: hard + +"strip-indent@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-indent@npm:4.0.0" + dependencies: + min-indent: ^1.0.1 + checksum: 06cbcd93da721c46bc13caeb1c00af93a9b18146a1c95927672d2decab6a25ad83662772417cea9317a2507fb143253ecc23c4415b64f5828cef9b638a744598 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"style-loader@npm:^3.3.1, style-loader@npm:~3.3.1": + version: 3.3.3 + resolution: "style-loader@npm:3.3.3" + peerDependencies: + webpack: ^5.0.0 + checksum: f59c953f56f6a935bd6a1dfa409f1128fed2b66b48ce4a7a75b85862a7156e5e90ab163878962762f528ec4d510903d828da645e143fbffd26f055dc1c094078 + languageName: node + linkType: hard + +"style-mod@npm:^4.0.0, style-mod@npm:^4.1.0": + version: 4.1.0 + resolution: "style-mod@npm:4.1.0" + checksum: 8402b14ca11113a3640d46b3cf7ba49f05452df7846bc5185a3535d9b6a64a3019e7fb636b59ccbb7816aeb0725b24723e77a85b05612a9360e419958e13b4e6 + languageName: node + linkType: hard + +"style-search@npm:^0.1.0": + version: 0.1.0 + resolution: "style-search@npm:0.1.0" + checksum: 3cfefe335033aad6d47da0725cb48f5db91a73935954c77eab77d9e415e6668cdb406da4a4f7ef9f1aca77853cf5ba7952c45e869caa5bd6439691d88098d468 + languageName: node + linkType: hard + +"stylelint-config-recommended@npm:^13.0.0": + version: 13.0.0 + resolution: "stylelint-config-recommended@npm:13.0.0" + peerDependencies: + stylelint: ^15.10.0 + checksum: a56eb6d1a7c7f3a7a172b54bc34218859ba22a5a06816fb4d0964f66cb83cf372062f2c97830e994ad68243548e15fc49abf28887c3261ab1b471b3aa69f8e82 + languageName: node + linkType: hard + +"stylelint-config-standard@npm:^34.0.0": + version: 34.0.0 + resolution: "stylelint-config-standard@npm:34.0.0" + dependencies: + stylelint-config-recommended: ^13.0.0 + peerDependencies: + stylelint: ^15.10.0 + checksum: 536249800c04b48a9c354067765f042713982e8222be17bb897a27d26546e50adfb87e6f1e4541807d720de3554345da99ab470e13e8d7ab0ab326c73ae3df61 + languageName: node + linkType: hard + +"stylelint-csstree-validator@npm:^3.0.0": + version: 3.0.0 + resolution: "stylelint-csstree-validator@npm:3.0.0" + dependencies: + css-tree: ^2.3.1 + peerDependencies: + stylelint: ">=7.0.0 <16.0.0" + checksum: e518c8c17714022946b7637c23a6816fd2ccdd6052a19c5a138b3f7ce9b913ead9c612ac4401e102f14800a19967dbfd4b588b44cbf3f3c6a5984bef7bda4017 + languageName: node + linkType: hard + +"stylelint-prettier@npm:^4.0.0": + version: 4.0.2 + resolution: "stylelint-prettier@npm:4.0.2" + dependencies: + prettier-linter-helpers: ^1.0.0 + peerDependencies: + prettier: ">=3.0.0" + stylelint: ">=15.8.0" + checksum: b60112c10b8f31456211d65b4c17238fdaf46ee9f80ab035621f2eb86b47505a4b9582d99f4334dfe370cc8104de870f7fcc256737d0f2e68f4357239f739054 + languageName: node + linkType: hard + +"stylelint@npm:^15.10.1": + version: 15.10.1 + resolution: "stylelint@npm:15.10.1" + dependencies: + "@csstools/css-parser-algorithms": ^2.3.0 + "@csstools/css-tokenizer": ^2.1.1 + "@csstools/media-query-list-parser": ^2.1.2 + "@csstools/selector-specificity": ^3.0.0 + balanced-match: ^2.0.0 + colord: ^2.9.3 + cosmiconfig: ^8.2.0 + css-functions-list: ^3.1.0 + css-tree: ^2.3.1 + debug: ^4.3.4 + fast-glob: ^3.3.0 + fastest-levenshtein: ^1.0.16 + file-entry-cache: ^6.0.1 + global-modules: ^2.0.0 + globby: ^11.1.0 + globjoin: ^0.1.4 + html-tags: ^3.3.1 + ignore: ^5.2.4 + import-lazy: ^4.0.0 + imurmurhash: ^0.1.4 + is-plain-object: ^5.0.0 + known-css-properties: ^0.27.0 + mathml-tag-names: ^2.1.3 + meow: ^10.1.5 + micromatch: ^4.0.5 + normalize-path: ^3.0.0 + picocolors: ^1.0.0 + postcss: ^8.4.24 + postcss-resolve-nested-selector: ^0.1.1 + postcss-safe-parser: ^6.0.0 + postcss-selector-parser: ^6.0.13 + postcss-value-parser: ^4.2.0 + resolve-from: ^5.0.0 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + style-search: ^0.1.0 + supports-hyperlinks: ^3.0.0 + svg-tags: ^1.0.0 + table: ^6.8.1 + write-file-atomic: ^5.0.1 + bin: + stylelint: bin/stylelint.mjs + checksum: 8eeae81fe4ed2dfc580d7c401806dbb058c14631abfafd0821db32f1e649aee62e3d39dda3462c6122826df91bd9799409be926e91b55b007622f51e44eb94c1 + languageName: node + linkType: hard + +"stylis@npm:4.2.0": + version: 4.2.0 + resolution: "stylis@npm:4.2.0" + checksum: 0eb6cc1b866dc17a6037d0a82ac7fa877eba6a757443e79e7c4f35bacedbf6421fadcab4363b39667b43355cbaaa570a3cde850f776498e5450f32ed2f9b7584 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0, supports-color@npm:^7.2.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-hyperlinks@npm:^3.0.0": + version: 3.0.0 + resolution: "supports-hyperlinks@npm:3.0.0" + dependencies: + has-flag: ^4.0.0 + supports-color: ^7.0.0 + checksum: 41021305de5255b10d821bf93c7a781f783e1693d0faec293d7fc7ccf17011b90bde84b0295fa92ba75c6c390351fe84fdd18848cad4bf656e464a958243c3e7 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"svg-tags@npm:^1.0.0": + version: 1.0.0 + resolution: "svg-tags@npm:1.0.0" + checksum: 407e5ef87cfa2fb81c61d738081c2decd022ce13b922d035b214b49810630bf5d1409255a4beb3a940b77b32f6957806deff16f1bf0ce1ab11c7a184115a0b7f + languageName: node + linkType: hard + +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d + languageName: node + linkType: hard + +"synckit@npm:^0.8.5": + version: 0.8.5 + resolution: "synckit@npm:0.8.5" + dependencies: + "@pkgr/utils": ^2.3.1 + tslib: ^2.5.0 + checksum: 8a9560e5d8f3d94dc3cf5f7b9c83490ffa30d320093560a37b88f59483040771fd1750e76b9939abfbb1b5a23fd6dfbae77f6b338abffe7cae7329cd9b9bb86b + languageName: node + linkType: hard + +"table@npm:^6.8.1": + version: 6.8.1 + resolution: "table@npm:6.8.1" + dependencies: + ajv: ^8.0.1 + lodash.truncate: ^4.4.2 + slice-ansi: ^4.0.0 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + checksum: 08249c7046125d9d0a944a6e96cfe9ec66908d6b8a9db125531be6eb05fa0de047fd5542e9d43b4f987057f00a093b276b8d3e19af162a9c40db2681058fd306 + languageName: node + linkType: hard + +"tapable@npm:^2.1.1, tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.3.7": + version: 5.3.9 + resolution: "terser-webpack-plugin@npm:5.3.9" + dependencies: + "@jridgewell/trace-mapping": ^0.3.17 + jest-worker: ^27.4.5 + schema-utils: ^3.1.1 + serialize-javascript: ^6.0.1 + terser: ^5.16.8 + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 41705713d6f9cb83287936b21e27c658891c78c4392159f5148b5623f0e8c48559869779619b058382a4c9758e7820ea034695e57dc7c474b4962b79f553bc5f + languageName: node + linkType: hard + +"terser@npm:^5.16.8": + version: 5.19.2 + resolution: "terser@npm:5.19.2" + dependencies: + "@jridgewell/source-map": ^0.3.3 + acorn: ^8.8.2 + commander: ^2.20.0 + source-map-support: ~0.5.20 + bin: + terser: bin/terser + checksum: e059177775b4d4f4cff219ad89293175aefbd1b081252270444dc83e42a2c5f07824eb2a85eae6e22ef6eb7ef04b21af36dd7d1dd7cfb93912310e57d416a205 + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"through@npm:^2.3.6, through@npm:^2.3.8": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"tiny-warning@npm:^1.0.2": + version: 1.0.3 + resolution: "tiny-warning@npm:1.0.3" + checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 + languageName: node + linkType: hard + +"titleize@npm:^3.0.0": + version: 3.0.0 + resolution: "titleize@npm:3.0.0" + checksum: 71fbbeabbfb36ccd840559f67f21e356e1d03da2915b32d2ae1a60ddcc13a124be2739f696d2feb884983441d159a18649e8d956648d591bdad35c430a6b6d28 + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"tough-cookie@npm:^4.1.2": + version: 4.1.3 + resolution: "tough-cookie@npm:4.1.3" + dependencies: + psl: ^1.1.33 + punycode: ^2.1.1 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: c9226afff36492a52118432611af083d1d8493a53ff41ec4ea48e5b583aec744b989e4280bcf476c910ec1525a89a4a0f1cae81c08b18fb2ec3a9b3a72b91dcc + languageName: node + linkType: hard + +"tr46@npm:^2.1.0": + version: 2.1.0 + resolution: "tr46@npm:2.1.0" + dependencies: + punycode: ^2.1.1 + checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 + languageName: node + linkType: hard + +"tr46@npm:^3.0.0": + version: 3.0.0 + resolution: "tr46@npm:3.0.0" + dependencies: + punycode: ^2.1.1 + checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"trim-newlines@npm:^4.0.2": + version: 4.1.1 + resolution: "trim-newlines@npm:4.1.1" + checksum: 5b09f8e329e8f33c1111ef26906332ba7ba7248cde3e26fc054bb3d69f2858bf5feedca9559c572ff91f33e52977c28e0d41c387df6a02a633cbb8c2d8238627 + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "ts-api-utils@npm:1.0.1" + peerDependencies: + typescript: ">=4.2.0" + checksum: 78794fc7270d295b36c1ac613465b5dc7e7226907a533125b30f177efef9dd630d4e503b00be31b44335eb2ebf9e136ebe97353f8fc5d383885d5fead9d54c09 + languageName: node + linkType: hard + +"ts-jest@npm:^26.0.0": + version: 26.5.6 + resolution: "ts-jest@npm:26.5.6" + dependencies: + bs-logger: 0.x + buffer-from: 1.x + fast-json-stable-stringify: 2.x + jest-util: ^26.1.0 + json5: 2.x + lodash: 4.x + make-error: 1.x + mkdirp: 1.x + semver: 7.x + yargs-parser: 20.x + peerDependencies: + jest: ">=26 <27" + typescript: ">=3.8 <5.0" + bin: + ts-jest: cli.js + checksum: 6f65ad4fe67ab3f0fd4c7f9954acbee863af05b2b3f88dd0f490bbcdc58002960fac908b2cb9f009ec14da6fe13cb00a39e291260d6e555abe72448d1c0a017f + languageName: node + linkType: hard + +"ts-jest@npm:^29.1.0": + version: 29.1.1 + resolution: "ts-jest@npm:29.1.1" + dependencies: + bs-logger: 0.x + fast-json-stable-stringify: 2.x + jest-util: ^29.0.0 + json5: ^2.2.3 + lodash.memoize: 4.x + make-error: 1.x + semver: ^7.5.3 + yargs-parser: ^21.0.1 + peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3 <6" + peerDependenciesMeta: + "@babel/core": + optional: true + "@jest/types": + optional: true + babel-jest: + optional: true + esbuild: + optional: true + bin: + ts-jest: cli.js + checksum: a8c9e284ed4f819526749f6e4dc6421ec666f20ab44d31b0f02b4ed979975f7580b18aea4813172d43e39b29464a71899f8893dd29b06b4a351a3af8ba47b402 + languageName: node + linkType: hard + +"tslib@npm:^1.9.0": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tslib@npm:^2.1.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0": + version: 2.6.0 + resolution: "tslib@npm:2.6.0" + checksum: c01066038f950016a18106ddeca4649b4d76caa76ec5a31e2a26e10586a59fceb4ee45e96719bf6c715648e7c14085a81fee5c62f7e9ebee68e77a5396e5538f + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^1.0.1, type-fest@npm:^1.2.1, type-fest@npm:^1.2.2": + version: 1.4.0 + resolution: "type-fest@npm:1.4.0" + checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-length@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + is-typed-array: ^1.1.9 + checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 + languageName: node + linkType: hard + +"typescript@npm:~5.0.2": + version: 5.0.4 + resolution: "typescript@npm:5.0.4" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 + languageName: node + linkType: hard + +"typescript@patch:typescript@~5.0.2#~builtin": + version: 5.0.4 + resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=85af82" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: bb309d320c59a26565fb3793dba550576ab861018ff3fd1b7fccabbe46ae4a35546bc45f342c0a0b6f265c801ccdf64ffd68f548f117ceb7f0eac4b805cd52a9 + languageName: node + linkType: hard + +"typestyle@npm:^2.0.1, typestyle@npm:^2.0.4": + version: 2.4.0 + resolution: "typestyle@npm:2.4.0" + dependencies: + csstype: 3.0.10 + free-style: 3.1.0 + checksum: 8b4f02c24f67b594f98507b15a753dabd4db5eb0af007e1d310527c64030e11e9464b25b5a6bc65fb5eec9a4459a8336050121ecc29063ac87b8b47a6d698893 + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 + which-boxed-primitive: ^1.0.2 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" + checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: ^2.0.0 + unicode-property-aliases-ecmascript: ^2.0.0 + checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.1.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" + checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.0 + resolution: "universalify@npm:2.0.0" + checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + languageName: node + linkType: hard + +"untildify@npm:^4.0.0": + version: 4.0.0 + resolution: "untildify@npm:4.0.0" + checksum: 39ced9c418a74f73f0a56e1ba4634b4d959422dff61f4c72a8e39f60b99380c1b45ed776fbaa0a4101b157e4310d873ad7d114e8534ca02609b4916bb4187fb9 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"url-parse@npm:^1.5.3, url-parse@npm:~1.5.4": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.1.3 + resolution: "v8-to-istanbul@npm:9.1.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.12 + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^2.0.0 + checksum: 5d592ab3d186b386065dace8e01c543a922a904b3cfac39667de172455a6b3d0e8e1401574fecb8a12092ad0809b5a8fd15f1cc14d0666139a1bb77cd6ac2cf8 + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + +"validate.io-array@npm:^1.0.3": + version: 1.0.6 + resolution: "validate.io-array@npm:1.0.6" + checksum: 54eca83ebc702e3e46499f9d9e77287a95ae25c4e727cd2fafee29c7333b3a36cca0c5d8f090b9406262786de80750fba85e7e7ef41e20bf8cc67d5570de449b + languageName: node + linkType: hard + +"validate.io-function@npm:^1.0.2": + version: 1.0.2 + resolution: "validate.io-function@npm:1.0.2" + checksum: e4cce2479a20cb7c42e8630c777fb107059c27bc32925f769e3a73ca5fd62b4892d897b3c80227e14d5fcd1c5b7d05544e0579d63e59f14034c0052cda7f7c44 + languageName: node + linkType: hard + +"validate.io-integer-array@npm:^1.0.0": + version: 1.0.0 + resolution: "validate.io-integer-array@npm:1.0.0" + dependencies: + validate.io-array: ^1.0.3 + validate.io-integer: ^1.0.4 + checksum: 5f6d7fab8df7d2bf546a05e830201768464605539c75a2c2417b632b4411a00df84b462f81eac75e1be95303e7e0ac92f244c137424739f4e15cd21c2eb52c7f + languageName: node + linkType: hard + +"validate.io-integer@npm:^1.0.4": + version: 1.0.5 + resolution: "validate.io-integer@npm:1.0.5" + dependencies: + validate.io-number: ^1.0.3 + checksum: 88b3f8bb5a5277a95305d64abbfc437079220ce4f57a148cc6113e7ccec03dd86b10a69d413982602aa90a62b8d516148a78716f550dcd3aff863ac1c2a7a5e6 + languageName: node + linkType: hard + +"validate.io-number@npm:^1.0.3": + version: 1.0.3 + resolution: "validate.io-number@npm:1.0.3" + checksum: 42418aeb6c969efa745475154fe576809b02eccd0961aad0421b090d6e7a12d23a3e28b0d5dddd2c6347c1a6bdccb82bba5048c716131cd20207244d50e07282 + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:8.2.0, vscode-jsonrpc@npm:^8.0.2": + version: 8.2.0 + resolution: "vscode-jsonrpc@npm:8.2.0" + checksum: f302a01e59272adc1ae6494581fa31c15499f9278df76366e3b97b2236c7c53ebfc71efbace9041cfd2caa7f91675b9e56f2407871a1b3c7f760a2e2ee61484a + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:^6.0.0": + version: 6.0.0 + resolution: "vscode-jsonrpc@npm:6.0.0" + checksum: 3a67a56f287e8c449f2d9752eedf91e704dc7b9a326f47fb56ac07667631deb45ca52192e9bccb2ab108764e48409d70fa64b930d46fc3822f75270b111c5f53 + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:^3.17.0": + version: 3.17.5 + resolution: "vscode-languageserver-protocol@npm:3.17.5" + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + checksum: dfb42d276df5dfea728267885b99872ecff62f6c20448b8539fae71bb196b420f5351c5aca7c1047bf8fb1f89fa94a961dce2bc5bf7e726198f4be0bb86a1e71 + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.17.5": + version: 3.17.5 + resolution: "vscode-languageserver-types@npm:3.17.5" + checksum: 79b420e7576398d396579ca3a461c9ed70e78db4403cd28bbdf4d3ed2b66a2b4114031172e51fad49f0baa60a2180132d7cb2ea35aa3157d7af3c325528210ac + languageName: node + linkType: hard + +"vscode-ws-jsonrpc@npm:~1.0.2": + version: 1.0.2 + resolution: "vscode-ws-jsonrpc@npm:1.0.2" + dependencies: + vscode-jsonrpc: ^8.0.2 + checksum: eb2fdb5c96f124326505f06564dfc6584318b748fd6e39b4c0ba16a0d383d13ba0e9433596abdb841428dfc2a5501994c3206723d1cb38c6af5fcac1faf4be26 + languageName: node + linkType: hard + +"w3c-keyname@npm:^2.2.4": + version: 2.2.8 + resolution: "w3c-keyname@npm:2.2.8" + checksum: 95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07 + languageName: node + linkType: hard + +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" + dependencies: + xml-name-validator: ^4.0.0 + checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"watchpack@npm:^2.4.0": + version: 2.4.0 + resolution: "watchpack@npm:2.4.0" + dependencies: + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.1.2 + checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"webidl-conversions@npm:^6.1.0": + version: 6.1.0 + resolution: "webidl-conversions@npm:6.1.0" + checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb + languageName: node + linkType: hard + +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b + languageName: node + linkType: hard + +"webpack-cli@npm:^5.0.1": + version: 5.1.4 + resolution: "webpack-cli@npm:5.1.4" + dependencies: + "@discoveryjs/json-ext": ^0.5.0 + "@webpack-cli/configtest": ^2.1.1 + "@webpack-cli/info": ^2.0.2 + "@webpack-cli/serve": ^2.0.5 + colorette: ^2.0.14 + commander: ^10.0.1 + cross-spawn: ^7.0.3 + envinfo: ^7.7.3 + fastest-levenshtein: ^1.0.12 + import-local: ^3.0.2 + interpret: ^3.1.1 + rechoir: ^0.8.0 + webpack-merge: ^5.7.3 + peerDependencies: + webpack: 5.x.x + peerDependenciesMeta: + "@webpack-cli/generators": + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: bin/cli.js + checksum: 3a4ad0d0342a6815c850ee4633cc2a8a5dae04f918e7847f180bf24ab400803cf8a8943707ffbed03eb20fe6ce647f996f60a2aade87b0b4a9954da3da172ce0 + languageName: node + linkType: hard + +"webpack-merge@npm:^5.7.3, webpack-merge@npm:^5.8.0": + version: 5.9.0 + resolution: "webpack-merge@npm:5.9.0" + dependencies: + clone-deep: ^4.0.1 + wildcard: ^2.0.0 + checksum: 64fe2c23aacc5f19684452a0e84ec02c46b990423aee6fcc5c18d7d471155bd14e9a6adb02bd3656eb3e0ac2532c8e97d69412ad14c97eeafe32fa6d10050872 + languageName: node + linkType: hard + +"webpack-sources@npm:^1.2.0": + version: 1.4.3 + resolution: "webpack-sources@npm:1.4.3" + dependencies: + source-list-map: ^2.0.0 + source-map: ~0.6.1 + checksum: 37463dad8d08114930f4bc4882a9602941f07c9f0efa9b6bc78738cd936275b990a596d801ef450d022bb005b109b9f451dd087db2f3c9baf53e8e22cf388f79 + languageName: node + linkType: hard + +"webpack-sources@npm:^3.2.3": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 + languageName: node + linkType: hard + +"webpack@npm:^5.76.1": + version: 5.88.2 + resolution: "webpack@npm:5.88.2" + dependencies: + "@types/eslint-scope": ^3.7.3 + "@types/estree": ^1.0.0 + "@webassemblyjs/ast": ^1.11.5 + "@webassemblyjs/wasm-edit": ^1.11.5 + "@webassemblyjs/wasm-parser": ^1.11.5 + acorn: ^8.7.1 + acorn-import-assertions: ^1.9.0 + browserslist: ^4.14.5 + chrome-trace-event: ^1.0.2 + enhanced-resolve: ^5.15.0 + es-module-lexer: ^1.2.1 + eslint-scope: 5.1.1 + events: ^3.2.0 + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.2.9 + json-parse-even-better-errors: ^2.3.1 + loader-runner: ^4.2.0 + mime-types: ^2.1.27 + neo-async: ^2.6.2 + schema-utils: ^3.2.0 + tapable: ^2.1.1 + terser-webpack-plugin: ^5.3.7 + watchpack: ^2.4.0 + webpack-sources: ^3.2.3 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 79476a782da31a21f6dd38fbbd06b68da93baf6a62f0d08ca99222367f3b8668f5a1f2086b7bb78e23172e31fa6df6fa7ab09b25e827866c4fc4dc2b30443ce2 + languageName: node + linkType: hard + +"whatwg-encoding@npm:^2.0.0": + version: 2.0.0 + resolution: "whatwg-encoding@npm:2.0.0" + dependencies: + iconv-lite: 0.6.3 + checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^2.3.0": + version: 2.3.0 + resolution: "whatwg-mimetype@npm:2.3.0" + checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 + languageName: node + linkType: hard + +"whatwg-url@npm:^11.0.0": + version: 11.0.0 + resolution: "whatwg-url@npm:11.0.0" + dependencies: + tr46: ^3.0.0 + webidl-conversions: ^7.0.0 + checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"whatwg-url@npm:^8.0.0": + version: 8.7.0 + resolution: "whatwg-url@npm:8.7.0" + dependencies: + lodash: ^4.7.0 + tr46: ^2.1.0 + webidl-conversions: ^6.1.0 + checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + 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 + checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + languageName: node + linkType: hard + +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.9": + version: 1.1.9 + resolution: "which-typed-array@npm:1.1.9" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + is-typed-array: ^1.1.10 + checksum: fe0178ca44c57699ca2c0e657b64eaa8d2db2372a4e2851184f568f98c478ae3dc3fdb5f7e46c384487046b0cf9e23241423242b277e03e8ba3dabc7c84c98ef + languageName: node + linkType: hard + +"which@npm:^1.2.9, which@npm:^1.3.1": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: ^2.0.0 + bin: + which: ./bin/which + checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"wildcard@npm:^2.0.0": + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c + languageName: node + linkType: hard + +"worker-loader@npm:^3.0.2": + version: 3.0.8 + resolution: "worker-loader@npm:3.0.8" + dependencies: + loader-utils: ^2.0.0 + schema-utils: ^3.0.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 84f4a7eeb2a1d8b9704425837e017c91eedfae67ac89e0b866a2dcf283323c1dcabe0258196278b7d5fd0041392da895c8a0c59ddf3a94f1b2e003df68ddfec3 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + +"write-file-atomic@npm:^5.0.1": + version: 5.0.1 + resolution: "write-file-atomic@npm:5.0.1" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^4.0.1 + checksum: 8dbb0e2512c2f72ccc20ccedab9986c7d02d04039ed6e8780c987dc4940b793339c50172a1008eed7747001bfacc0ca47562668a069a7506c46c77d7ba3926a9 + languageName: node + linkType: hard + +"ws@npm:^8.11.0": + version: 8.14.2 + resolution: "ws@npm:8.14.2" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 3ca0dad26e8cc6515ff392b622a1467430814c463b3368b0258e33696b1d4bed7510bc7030f7b72838b9fdeb8dbd8839cbf808367d6aae2e1d668ce741d4308b + languageName: node + linkType: hard + +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad + languageName: node + linkType: hard + +"xml@npm:^1.0.1": + version: 1.0.1 + resolution: "xml@npm:1.0.1" + checksum: 11b5545ef3f8fec3fa29ce251f50ad7b6c97c103ed4d851306ec23366f5fa4699dd6a942262df52313a0cd1840ab26256da253c023bad3309d8ce46fe6020ca0 + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 + languageName: node + linkType: hard + +"xtend@npm:^4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"xterm-addon-canvas@npm:~0.3.0": + version: 0.3.0 + resolution: "xterm-addon-canvas@npm:0.3.0" + peerDependencies: + xterm: ^5.0.0 + checksum: 21eabd28a2718e775399f27e21922ec4e22528576ae88278ef39c68239119e4576eecd59cf0f1c76dfcbea0f82b779f8dbaf4ce38e04e648844c33ac7632d333 + languageName: node + linkType: hard + +"xterm-addon-fit@npm:~0.7.0": + version: 0.7.0 + resolution: "xterm-addon-fit@npm:0.7.0" + peerDependencies: + xterm: ^5.0.0 + checksum: 512d41f80d6f9427ba02dab4e6fd642e94775a9cf7ef72ae4b55eab2a36856b5c67069bfc66b4af412fdce29a0842f9c6382af3672f0b514c4352dfd47defe8f + languageName: node + linkType: hard + +"xterm-addon-web-links@npm:~0.8.0": + version: 0.8.0 + resolution: "xterm-addon-web-links@npm:0.8.0" + peerDependencies: + xterm: ^5.0.0 + checksum: fe07572adfaa84ceeb961db3ae577aeb2342ea5dcd4948170d1b733ae8045693fab8808f9c63cc43a532b033ae95e63e62ac14bc2e34def764e68f6362ccae2b + languageName: node + linkType: hard + +"xterm-addon-webgl@npm:~0.14.0": + version: 0.14.0 + resolution: "xterm-addon-webgl@npm:0.14.0" + peerDependencies: + xterm: ^5.0.0 + checksum: 05f144c920660ad8122aa13564612b1ce71b92ba8f74b3387db3e39b616437659da36b7edf3aefe5900c59956cd6ca1272a0892248df751c8899a202befe019c + languageName: node + linkType: hard + +"xterm@npm:~5.1.0": + version: 5.1.0 + resolution: "xterm@npm:5.1.0" + checksum: cbacbc9dc1bbcf21dabecff46856b43f2d5854b42c1bec4ea03a5720000f2a88d79b0da45b6c38213d6607474a1fbe66d5ff25fa120b7e9e60eeed964dd840a1 + languageName: node + linkType: hard + +"y-protocols@npm:^1.0.5": + version: 1.0.5 + resolution: "y-protocols@npm:1.0.5" + dependencies: + lib0: ^0.2.42 + checksum: d19404a4ebafcf3761c28b881abe8c32ab6e457db0e5ffc7dbb749cbc2c3bb98e003a43f3e8eba7f245b2698c76f2c4cdd1c2db869f8ec0c6ef94736d9a88652 + languageName: node + linkType: hard + +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f + languageName: node + linkType: hard + +"yaml@npm:^2.2.2": + version: 2.3.1 + resolution: "yaml@npm:2.3.1" + checksum: 2c7bc9a7cd4c9f40d3b0b0a98e370781b68b8b7c4515720869aced2b00d92f5da1762b4ffa947f9e795d6cd6b19f410bd4d15fdd38aca7bd96df59bd9486fb54 + languageName: node + linkType: hard + +"yargs-parser@npm:20.x, yargs-parser@npm:^20.2.9": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs@npm:^15.0.1": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + 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 + checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 + languageName: node + linkType: hard + +"yargs@npm:^17.3.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + 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 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + +"yjs@npm:^13.5.40": + version: 13.5.51 + resolution: "yjs@npm:13.5.51" + dependencies: + lib0: ^0.2.72 + checksum: 4dea7a4c71163fd64f24cc153c25af641cefed7c7aadbc7e0973e2f35398635a58b5da4a45f8e10e0fc4331cde517869ac626e6b449d66766fc61d12e81b06f7 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard From b5ebb6701fdd59105b4db1bc0d6eac2077e5842b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Thu, 5 Oct 2023 16:52:27 +0200 Subject: [PATCH 11/24] Use setting to add clone button in file browser --- schema/plugin.json | 5 +++ src/{cloneCommand.ts => cloneCommand.tsx} | 52 +++++++++++++++++++---- src/index.ts | 4 -- src/widgets/gitClone.tsx | 44 ------------------- 4 files changed, 48 insertions(+), 57 deletions(-) rename src/{cloneCommand.ts => cloneCommand.tsx} (72%) delete mode 100644 src/widgets/gitClone.tsx diff --git a/schema/plugin.json b/schema/plugin.json index 3b40fda7b..cafb178ff 100644 --- a/schema/plugin.json +++ b/schema/plugin.json @@ -190,5 +190,10 @@ "jupyter.lab.internationalization": { "selectors": ["jupyter.lab.menus/.*/args/text"], "domain": "jupyterlab_git" + }, + "jupyter.lab.toolbars": { + "FileBrowser": [ + { "name": "gitClone", "rank": 31 } + ] } } diff --git a/src/cloneCommand.ts b/src/cloneCommand.tsx similarity index 72% rename from src/cloneCommand.ts rename to src/cloneCommand.tsx index 0e6729165..900bec746 100644 --- a/src/cloneCommand.ts +++ b/src/cloneCommand.tsx @@ -2,29 +2,40 @@ import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { ITranslator, nullTranslator } from '@jupyterlab/translation'; -import { CommandIDs, IGitExtension, Level } from './tokens'; +import { + Dialog, + ICommandPalette, + IToolbarWidgetRegistry, + ReactWidget, + showDialog, + ToolbarButtonComponent, + UseSignal +} from '@jupyterlab/apputils'; +import { IChangedArgs } from '@jupyterlab/coreutils'; import { IDefaultFileBrowser } from '@jupyterlab/filebrowser'; -import { Dialog, ICommandPalette, showDialog } from '@jupyterlab/apputils'; -import { GitCloneForm } from './widgets/GitCloneForm'; -import { logger } from './logger'; +import { ITranslator, nullTranslator } from '@jupyterlab/translation'; +import * as React from 'react'; import { addFileBrowserContextMenu, IGitCloneArgs, Operation, showGitOperationDialog } from './commandsAndMenu'; +import { logger } from './logger'; import { GitExtension } from './model'; -import { addCloneButton } from './widgets/gitClone'; +import { cloneIcon } from './style/icons'; +import { CommandIDs, IGitExtension, Level } from './tokens'; +import { GitCloneForm } from './widgets/GitCloneForm'; export const gitCloneCommandPlugin: JupyterFrontEndPlugin = { id: '@jupyterlab/git:clone', - requires: [IGitExtension, IDefaultFileBrowser], + requires: [IGitExtension, IDefaultFileBrowser, IToolbarWidgetRegistry], optional: [ICommandPalette, ITranslator], activate: ( app: JupyterFrontEnd, gitModel: IGitExtension, fileBrowser: IDefaultFileBrowser, + toolbarRegistry: IToolbarWidgetRegistry, palette: ICommandPalette | null, translator: ITranslator | null ) => { @@ -85,8 +96,31 @@ export const gitCloneCommandPlugin: JupyterFrontEndPlugin = { } } }); - // Add a clone button to the file browser extension toolbar - addCloneButton(gitModel, fileBrowser, app.commands, trans); + + // Register a clone button to the file browser extension toolbar + toolbarRegistry.addFactory('FileBrowser', 'gitClone', () => + ReactWidget.create( + + {(_, change?: IChangedArgs) => ( + { + app.commands.execute(CommandIDs.gitClone); + }} + tooltip={trans.__('Git Clone')} + /> + )} + + ) + ); // Add the context menu items for the default file browser addFileBrowserContextMenu(gitModel, fileBrowser, app.contextMenu, trans); diff --git a/src/index.ts b/src/index.ts index 01d9faec4..038c1b812 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,7 +30,6 @@ import { GitExtension } from './model'; import { getServerSettings } from './server'; import { gitIcon } from './style/icons'; import { CommandIDs, Git, IGitExtension } from './tokens'; -import { addCloneButton } from './widgets/gitClone'; import { GitWidget } from './widgets/GitWidget'; import { IEditorLanguageRegistry } from '@jupyterlab/codemirror'; @@ -238,9 +237,6 @@ async function activate( mainMenu.addMenu(createGitMenu(app.commands, trans)); } - // Add a clone button to the file browser extension toolbar - addCloneButton(gitExtension, fileBrowser, app.commands, trans); - // Add the status bar widget if (statusBar) { addStatusBarWidget(statusBar, gitExtension, settings, trans); diff --git a/src/widgets/gitClone.tsx b/src/widgets/gitClone.tsx deleted file mode 100644 index 475952981..000000000 --- a/src/widgets/gitClone.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { - ReactWidget, - ToolbarButtonComponent, - UseSignal -} from '@jupyterlab/apputils'; -import { IChangedArgs } from '@jupyterlab/coreutils'; -import { FileBrowser } from '@jupyterlab/filebrowser'; -import { TranslationBundle } from '@jupyterlab/translation'; -import { CommandRegistry } from '@lumino/commands'; -import * as React from 'react'; -import { cloneIcon } from '../style/icons'; -import { CommandIDs, IGitExtension } from '../tokens'; - -export function addCloneButton( - model: IGitExtension, - filebrowser: FileBrowser, - commands: CommandRegistry, - trans: TranslationBundle -): void { - filebrowser.toolbar.addItem( - 'gitClone', - ReactWidget.create( - - {(_, change?: IChangedArgs) => ( - { - commands.execute(CommandIDs.gitClone); - }} - tooltip={trans.__('Git Clone')} - /> - )} - - ) - ); -} From db8b4f1b4b57ccfe132d5be8257577dbe589b3cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Fri, 6 Oct 2023 18:00:31 +0200 Subject: [PATCH 12/24] Remove the logger in favor of the notifications --- pyproject.toml | 2 +- .../test-components/BranchMenu.spec.tsx | 2 - .../test-components/GitPanel.spec.tsx | 2 - .../test-components/TagMenu.spec.tsx | 14 +- .../test-components/Toolbar.spec.tsx | 2 - src/cloneCommand.tsx | 24 +- src/commandsAndMenu.tsx | 258 ++++++++++-------- src/components/Alert.tsx | 180 ------------ src/components/BranchMenu.tsx | 56 ++-- src/components/CommitComparisonBox.tsx | 16 +- src/components/Feedback.tsx | 139 ---------- src/components/GitPanel.tsx | 73 ++--- src/components/NewBranchDialog.tsx | 37 ++- src/components/NewTagDialog.tsx | 63 ++--- src/components/ResetRevertDialog.tsx | 64 +++-- src/components/SinglePastCommitInfo.tsx | 22 +- src/components/SuspendModal.tsx | 63 ----- src/components/TagMenu.tsx | 59 ++-- src/components/Toolbar.tsx | 38 ++- src/index.ts | 1 - src/logger.ts | 40 --- src/notifications.ts | 47 ++++ src/tokens.ts | 36 --- src/widgets/GitWidget.tsx | 40 +-- 24 files changed, 412 insertions(+), 866 deletions(-) delete mode 100644 src/components/Alert.tsx delete mode 100644 src/components/Feedback.tsx delete mode 100644 src/components/SuspendModal.tsx delete mode 100644 src/logger.ts create mode 100644 src/notifications.ts diff --git a/pyproject.toml b/pyproject.toml index 4f52c207a..8216592e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ classifiers = [ ] dependencies = [ "jupyter_server>=2.0.1,<3", - "nbdime~=4.0", + "nbdime~=4.0.0a0", "nbformat", "packaging", "pexpect", diff --git a/src/__tests__/test-components/BranchMenu.spec.tsx b/src/__tests__/test-components/BranchMenu.spec.tsx index c6bdbbb18..9953b107b 100644 --- a/src/__tests__/test-components/BranchMenu.spec.tsx +++ b/src/__tests__/test-components/BranchMenu.spec.tsx @@ -5,7 +5,6 @@ import * as React from 'react'; import { ActionButton } from '../../components/ActionButton'; import { BranchMenu, IBranchMenuProps } from '../../components/BranchMenu'; import * as git from '../../git'; -import { Logger } from '../../logger'; import { GitExtension } from '../../model'; import { listItemClass, nameClass } from '../../style/BranchMenu'; import { @@ -102,7 +101,6 @@ describe('BranchMenu', () => { commands: { execute: jest.fn() } as any, - logger: new Logger(), trans: trans, ...props }; diff --git a/src/__tests__/test-components/GitPanel.spec.tsx b/src/__tests__/test-components/GitPanel.spec.tsx index 712e7528a..115060f5e 100644 --- a/src/__tests__/test-components/GitPanel.spec.tsx +++ b/src/__tests__/test-components/GitPanel.spec.tsx @@ -7,7 +7,6 @@ import React from 'react'; import { CommitBox } from '../../components/CommitBox'; import { GitPanel, IGitPanelProps } from '../../components/GitPanel'; import * as git from '../../git'; -import { Logger } from '../../logger'; import { GitExtension as GitModel } from '../../model'; import { defaultMockedResponses, @@ -59,7 +58,6 @@ describe('GitPanel', () => { const props: IGitPanelProps = { model: null, commands: null, - logger: new Logger(), settings: null, filebrowser: { path: '/dummy/path' diff --git a/src/__tests__/test-components/TagMenu.spec.tsx b/src/__tests__/test-components/TagMenu.spec.tsx index a83565dce..596601726 100644 --- a/src/__tests__/test-components/TagMenu.spec.tsx +++ b/src/__tests__/test-components/TagMenu.spec.tsx @@ -1,19 +1,18 @@ +import { nullTranslator } from '@jupyterlab/translation'; +import ClearIcon from '@mui/icons-material/Clear'; import { mount, shallow } from 'enzyme'; import 'jest'; import * as React from 'react'; -import { TagMenu, ITagMenuProps } from '../../components/TagMenu'; +import { ITagMenuProps, TagMenu } from '../../components/TagMenu'; import * as git from '../../git'; -import { Logger } from '../../logger'; import { GitExtension } from '../../model'; -import { IGitExtension } from '../../tokens'; import { listItemClass } from '../../style/BranchMenu'; +import { IGitExtension } from '../../tokens'; import { - mockedRequestAPI, + DEFAULT_REPOSITORY_PATH, defaultMockedResponses, - DEFAULT_REPOSITORY_PATH + mockedRequestAPI } from '../utils'; -import ClearIcon from '@material-ui/icons/Clear'; -import { nullTranslator } from '@jupyterlab/translation'; jest.mock('../../git'); jest.mock('@jupyterlab/apputils'); @@ -80,7 +79,6 @@ describe('TagMenu', () => { return { branching: false, pastCommits: [], - logger: new Logger(), model: model as IGitExtension, tagsList: TAGS, trans: trans, diff --git a/src/__tests__/test-components/Toolbar.spec.tsx b/src/__tests__/test-components/Toolbar.spec.tsx index 63b08f773..01137ae81 100644 --- a/src/__tests__/test-components/Toolbar.spec.tsx +++ b/src/__tests__/test-components/Toolbar.spec.tsx @@ -6,7 +6,6 @@ import * as React from 'react'; import { ActionButton } from '../../components/ActionButton'; import { IToolbarProps, Toolbar } from '../../components/Toolbar'; import * as git from '../../git'; -import { Logger } from '../../logger'; import { GitExtension } from '../../model'; import { pullIcon, pushIcon } from '../../style/icons'; import { toolbarMenuButtonClass } from '../../style/Toolbar'; @@ -53,7 +52,6 @@ describe('Toolbar', () => { repository: model.pathRepository, model: model, branching: false, - logger: new Logger(), nCommitsAhead: 0, nCommitsBehind: 0, commands: { diff --git a/src/cloneCommand.tsx b/src/cloneCommand.tsx index 900bec746..8f11d00f2 100644 --- a/src/cloneCommand.tsx +++ b/src/cloneCommand.tsx @@ -6,6 +6,7 @@ import { Dialog, ICommandPalette, IToolbarWidgetRegistry, + Notification, ReactWidget, showDialog, ToolbarButtonComponent, @@ -21,11 +22,11 @@ import { Operation, showGitOperationDialog } from './commandsAndMenu'; -import { logger } from './logger'; import { GitExtension } from './model'; import { cloneIcon } from './style/icons'; -import { CommandIDs, IGitExtension, Level } from './tokens'; +import { CommandIDs, IGitExtension } from './tokens'; import { GitCloneForm } from './widgets/GitCloneForm'; +import { showDetails, showError } from './notifications'; export const gitCloneCommandPlugin: JupyterFrontEndPlugin = { id: '@jupyterlab/git:clone', @@ -59,10 +60,7 @@ export const gitCloneCommandPlugin: JupyterFrontEndPlugin = { }); if (result.button.accept && result.value?.url) { - logger.log({ - level: Level.RUNNING, - message: trans.__('Cloning…') - }); + const id = Notification.emit(trans.__('Cloning…'), 'in-progress'); try { const details = await showGitOperationDialog( gitModel as GitExtension, @@ -75,10 +73,11 @@ export const gitCloneCommandPlugin: JupyterFrontEndPlugin = { submodules: result.value.submodules } ); - logger.log({ + Notification.update({ + id, message: trans.__('Successfully cloned'), - level: Level.SUCCESS, - details + type: 'success', + ...showDetails(details, trans) }); await fileBrowserModel.refresh(); } catch (error) { @@ -86,10 +85,11 @@ export const gitCloneCommandPlugin: JupyterFrontEndPlugin = { 'Encountered an error when cloning the repository. Error: ', error ); - logger.log({ + Notification.update({ + id, message: trans.__('Failed to clone'), - level: Level.ERROR, - error: error as Error + type: 'error', + ...showError(error as Error, trans) }); throw error; } diff --git a/src/commandsAndMenu.tsx b/src/commandsAndMenu.tsx index 2e5d20ddf..7486714d0 100644 --- a/src/commandsAndMenu.tsx +++ b/src/commandsAndMenu.tsx @@ -3,6 +3,7 @@ import { Dialog, InputDialog, MainAreaWidget, + Notification, ReactWidget, showDialog, showErrorMessage @@ -35,7 +36,6 @@ import { PreviewMainAreaWidget } from './components/diff/PreviewMainAreaWidget'; import { CONTEXT_COMMANDS } from './components/FileList'; import { ManageRemoteDialogue } from './components/ManageRemoteDialogue'; import { AUTH_ERROR_MESSAGES, requestAPI } from './git'; -import { logger } from './logger'; import { getDiffProvider, GitExtension } from './model'; import { addIcon, @@ -47,18 +47,13 @@ import { removeIcon, tagIcon } from './style/icons'; -import { - CommandIDs, - ContextCommandIDs, - Git, - IGitExtension, - Level -} from './tokens'; +import { CommandIDs, ContextCommandIDs, Git, IGitExtension } from './tokens'; import { AdvancedPushForm } from './widgets/AdvancedPushForm'; import { GitCredentialsForm } from './widgets/CredentialsBox'; import { discardAllChanges } from './widgets/discardAllChanges'; import { CheckboxForm } from './widgets/GitResetToRemoteForm'; import { IEditorLanguageRegistry } from '@jupyterlab/codemirror'; +import { showDetails, showError } from './notifications'; export interface IGitCloneArgs { /** @@ -226,16 +221,14 @@ export function addCommands( }); if (result.button.accept) { - logger.log({ - message: trans.__('Initializing…'), - level: Level.RUNNING - }); + const id = Notification.emit(trans.__('Initializing…'), 'in-progress'); try { await gitModel.init(currentPath); gitModel.pathRepository = currentPath; - logger.log({ + Notification.update({ + id, message: trans.__('Git repository initialized.'), - level: Level.SUCCESS + type: 'success' }); } catch (error) { console.error( @@ -244,10 +237,11 @@ export function addCommands( ), error ); - logger.log({ + Notification.update({ + id, message: trans.__('Failed to initialize the Git repository'), - level: Level.ERROR, - error: error as Error + type: 'error', + ...showError(error as Error, trans) }); } } @@ -334,6 +328,7 @@ export function addCommands( caption: trans.__('Push code to remote repository'), isEnabled: () => gitModel.pathRepository !== null, execute: async args => { + let id: string | null = null; try { let remote; let force; @@ -355,10 +350,7 @@ export function addCommands( } } - logger.log({ - level: Level.RUNNING, - message: trans.__('Pushing…') - }); + id = Notification.emit(trans.__('Pushing…'), 'in-progress'); const details = await showGitOperationDialog( gitModel, force ? Operation.ForcePush : Operation.Push, @@ -366,10 +358,11 @@ export function addCommands( (args = { remote }) ); - logger.log({ + Notification.update({ + id, message: trans.__('Successfully pushed'), - level: Level.SUCCESS, - details + type: 'success', + ...showDetails(details, trans) }); } catch (error: any) { if (error.name !== 'CancelledError') { @@ -377,17 +370,23 @@ export function addCommands( trans.__('Encountered an error when pushing changes. Error: '), error ); - logger.log({ - message: trans.__('Failed to push'), - level: Level.ERROR, - error: error as Error - }); + + const message = trans.__('Failed to push'); + const options = showError(error as Error, trans); + if (id) { + Notification.update({ + id, + message, + type: 'error', + ...options + }); + } else { + Notification.error(message, options); + } } else { - return logger.log({ - //Empty logger to supress the message - message: '', - level: Level.INFO - }); + if (id) { + Notification.dismiss(id); + } } } } @@ -407,23 +406,22 @@ export function addCommands( : trans.__('Pull latest code from remote repository'), isEnabled: () => gitModel.pathRepository !== null, execute: async args => { + let id: string | null = null; try { if (args.force) { await discardAllChanges(gitModel, trans, args.fallback as boolean); } - logger.log({ - level: Level.RUNNING, - message: trans.__('Pulling…') - }); + id = Notification.emit(trans.__('Pulling…'), 'in-progress'); const details = await showGitOperationDialog( gitModel, Operation.Pull, trans ); - logger.log({ + Notification.update({ + id, message: trans.__('Successfully pulled'), - level: Level.SUCCESS, - details + type: 'success', + ...showDetails(details, trans) }); } catch (error: any) { if (error.name !== 'CancelledError') { @@ -449,25 +447,27 @@ export function addCommands( }); } else { if ((error as any).cancelled) { - // Empty message to hide alert - logger.log({ - message: '', - level: Level.INFO - }); + if (id) { + Notification.dismiss(id); + } } else { - logger.log({ - message: trans.__('Failed to pull'), - level: Level.ERROR, - error - }); + const message = trans.__('Failed to pull'); + const options = showError(error, trans); + if (id) { + Notification.update({ + id, + message, + ...options + }); + } else { + Notification.error(message, options); + } } } } else { - return logger.log({ - //Empty logger to supress the message - message: '', - level: Level.INFO - }); + if (id) { + Notification.dismiss(id); + } } } } @@ -496,24 +496,32 @@ export function addCommands( ] }); if (result.button.accept) { + let id: string | null = null; try { if (result.value?.checked) { - logger.log({ - message: trans.__('Closing all opened files...'), - level: Level.RUNNING - }); + id = Notification.emit( + trans.__('Closing all opened files...'), + 'in-progress' + ); await fileBrowserModel.manager.closeAll(); } - logger.log({ - message: trans.__('Resetting...'), - level: Level.RUNNING - }); + const message = trans.__('Resetting...'); + if (id) { + Notification.update({ id, message }); + } else { + id = Notification.emit(message, 'in-progress'); + } + await gitModel.resetToCommit(gitModel.status.remote ?? undefined); - logger.log({ + Notification.update({ + id, message: trans.__('Successfully reset'), - level: Level.SUCCESS, - details: trans.__( - 'Successfully reset the current branch to its remote state' + type: 'success', + ...showDetails( + trans.__( + 'Successfully reset the current branch to its remote state' + ), + trans ) }); } catch (error) { @@ -521,11 +529,18 @@ export function addCommands( 'Encountered an error when resetting the current branch to its remote state. Error: ', error ); - logger.log({ - message: trans.__('Reset failed'), - level: Level.ERROR, - error: error as Error - }); + const message = trans.__('Reset failed'); + const options = showError(error as Error, trans); + if (id) { + Notification.update({ + id, + type: 'error', + message, + ...options + }); + } else { + Notification.error(message, options); + } } } } @@ -647,10 +662,9 @@ export function addCommands( await gitModel.add(model.filename); await gitModel.refresh(); } catch (reason) { - logger.log({ - message: (reason as Error).message ?? (reason as string), - level: Level.ERROR - }); + Notification.error( + (reason as Error).message ?? (reason as string) + ); } finally { diffWidget.dispose(); } @@ -768,27 +782,29 @@ export function addCommands( } if (branch) { - logger.log({ - level: Level.RUNNING, - message: trans.__("Merging branch '%1'…", branch) - }); + const id = Notification.emit( + trans.__("Merging branch '%1'…", branch), + 'in-progress' + ); try { await gitModel.merge(branch); } catch (err) { - logger.log({ - level: Level.ERROR, + Notification.update({ + id, + type: 'error', message: trans.__( "Failed to merge branch '%1' into '%2'.", branch, gitModel.currentBranch?.name ), - error: err as Error + ...showError(err as Error, trans) }); return; } - logger.log({ - level: Level.SUCCESS, + Notification.update({ + id, + type: 'success', message: trans.__( "Branch '%1' merged into '%2'.", branch, @@ -843,27 +859,29 @@ export function addCommands( } if (branch) { - logger.log({ - level: Level.RUNNING, - message: trans.__("Rebasing current branch onto '%1'…", branch) - }); + const id = Notification.emit( + trans.__("Rebasing current branch onto '%1'…", branch), + 'in-progress' + ); try { await gitModel.rebase(branch); } catch (err) { - logger.log({ - level: Level.ERROR, + Notification.update({ + id, + type: 'error', message: trans.__( "Failed to rebase branch '%1' onto '%2'.", gitModel.currentBranch?.name, branch ), - error: err as Error + ...showError(err as Error, trans) }); return; } - logger.log({ - level: Level.SUCCESS, + Notification.update({ + id, + type: 'success', message: trans.__( "Branch '%1' rebase onto '%2'.", gitModel.currentBranch?.name, @@ -921,10 +939,7 @@ export function addCommands( } })(action) ?? ''; - logger.log({ - level: Level.RUNNING, - message - }); + const id = Notification.emit(message, 'in-progress'); try { await gitModel.resolveRebase(action as any); } catch (err) { @@ -939,10 +954,11 @@ export function addCommands( return trans.__('Fail to abort the rebase.'); } })(action) ?? ''; - logger.log({ - level: Level.ERROR, + Notification.update({ + id, + type: 'error', message, - error: err as Error + ...showError(err as Error, trans) }); return; } @@ -958,8 +974,9 @@ export function addCommands( return trans.__('Rebase aborted.'); } })(action) ?? ''; - logger.log({ - level: Level.SUCCESS, + Notification.update({ + id, + type: 'success', message: message_ }); } @@ -981,22 +998,29 @@ export function addCommands( const stashMsg = stashDialog.value ?? ''; if (stashDialog.button.accept) { - logger.log({ - level: Level.RUNNING, - message: trans.__('Stashing changes') - }); + const id = Notification.emit( + trans.__('Stashing changes'), + 'in-progress' + ); try { await gitModel.stashChanges(stashMsg); // Success - logger.log({ + Notification.update({ + id, message: trans.__('Successfully stashed'), - level: Level.SUCCESS + type: 'success' }); } catch (error: any) { console.error( 'Encountered an error when pulling changes. Error: ', error ); + Notification.update({ + id, + message: trans.__('Failed to stash'), + type: 'error', + ...showError(error as Error, trans) + }); } } } @@ -1014,16 +1038,12 @@ export function addCommands( execute: async args => { try { await gitModel.refreshStash(); - logger.log({ - message: trans.__('Got the stash list'), - level: Level.INFO - }); + Notification.info(trans.__('Got the stash list')); } catch (err) { - logger.log({ - message: trans.__('Failed to get the stash'), - level: Level.ERROR, - error: err as Error - }); + Notification.error( + trans.__('Failed to get the stash'), + showError(err as Error, trans) + ); } } }); diff --git a/src/components/Alert.tsx b/src/components/Alert.tsx deleted file mode 100644 index c9eb34cba..000000000 --- a/src/components/Alert.tsx +++ /dev/null @@ -1,180 +0,0 @@ -import { TranslationBundle } from '@jupyterlab/translation'; -import Portal from '@mui/material/Portal'; -import Slide from '@mui/material/Slide'; -import Snackbar from '@mui/material/Snackbar'; -import * as React from 'react'; - -/** - * Returns a React component for "sliding-in" an alert. - * - * @private - * @param props - component properties - * @returns React element - */ -function SlideTransition(props: any): React.ReactElement { - return ; -} - -/** - * Interface describing component properties. - */ -export interface IAlertProps { - /** - * Detailed message - */ - details?: string; - - /** - * Alert duration (in milliseconds). - */ - duration?: number; - - /** - * Error object - */ - error?: Error; - - /** - * Alert message. - */ - message: string; - - /** - * Boolean indicating whether to display an alert. - */ - open: boolean; - - /** - * Callback invoked upon clicking on an alert. - */ - onClick?: (event?: any) => void; - - /** - * Callback invoked upon closing an alert. - */ - onClose: (event?: any) => void; - - /** - * Alert severity. - */ - severity?: string; - - /** - * The application language translator. - */ - trans: TranslationBundle; -} - -/** - * React component for rendering an alert. - */ -export class Alert extends React.Component { - /** - * Returns a React component for rendering an alert. - * - * @param props - component properties - * @returns React component - */ - constructor(props: IAlertProps) { - super(props); - } - - /** - * Renders the component. - * - * @returns React element - */ - render(): React.ReactElement { - let duration: number | null = null; - - const severity = this.props.severity || 'info'; - if (severity === 'success') { - duration = this.props.duration || 5000; // milliseconds - } - - /* let action: React.ReactNode; - if (this.props.error) { - action = ( - - ); - } else if (this.props.details) { - action = ( - - ); - }*/ - - return ( - - - {/* - {this.props.message || this.props.trans.__('(missing message)')} - */} -

    - {this.props.message || this.props.trans.__('(missing message)')} -

    -
    -
    - ); - } - - /** - * Callback invoked upon clicking on an alert. - * - * @param event - event object - */ - private _onClick = (event: any): void => { - if (this.props.onClick) { - this.props.onClick(event); - return; - } - this._onClose(event, 'click'); - }; - - /** - * Callback invoked upon closing an alert. - * - * @param event - event object - * @param reason - reason why the callback was invoked - */ - private _onClose = (event: any, reason: string): void => { - if (reason === 'clickaway') { - return; - } - this.props.onClose(event); - }; -} diff --git a/src/components/BranchMenu.tsx b/src/components/BranchMenu.tsx index 9fa19b8af..12ef671ff 100644 --- a/src/components/BranchMenu.tsx +++ b/src/components/BranchMenu.tsx @@ -1,4 +1,9 @@ -import { Dialog, showDialog, showErrorMessage } from '@jupyterlab/apputils'; +import { + Dialog, + Notification, + showDialog, + showErrorMessage +} from '@jupyterlab/apputils'; import { TranslationBundle } from '@jupyterlab/translation'; import { CommandRegistry } from '@lumino/commands'; import List from '@mui/material/List'; @@ -7,7 +12,6 @@ import ClearIcon from '@mui/icons-material/Clear'; import * as React from 'react'; import { FixedSizeList, ListChildComponentProps } from 'react-window'; import { classes } from 'typestyle'; -import { Logger } from '../logger'; import { hiddenButtonStyle } from '../style/ActionButtonStyle'; import { activeListItemClass, @@ -22,9 +26,10 @@ import { wrapperClass } from '../style/BranchMenu'; import { branchIcon, mergeIcon, trashIcon } from '../style/icons'; -import { CommandIDs, Git, IGitExtension, Level } from '../tokens'; +import { CommandIDs, Git, IGitExtension } from '../tokens'; import { ActionButton } from './ActionButton'; import { NewBranchDialog } from './NewBranchDialog'; +import { showError } from '../notifications'; const ITEM_HEIGHT = 24.8; // HTML element height for a single branch const MIN_HEIGHT = 150; // Minimal HTML element height for the branches list @@ -35,19 +40,12 @@ const MAX_HEIGHT = 400; // Maximal HTML element height for the branches list * * @private * @param error - error - * @param logger - the logger + * @param id - notification id + * @param trans - translation object */ -function onBranchError( - error: any, - logger: Logger, - trans: TranslationBundle -): void { +function onBranchError(error: any, id: string, trans: TranslationBundle): void { if (error.message.includes('following files would be overwritten')) { - // Empty log message to hide the executing alert - logger.log({ - message: '', - level: Level.INFO - }); + Notification.dismiss(id); showDialog({ title: trans.__('Unable to switch branch'), body: ( @@ -70,10 +68,11 @@ function onBranchError( buttons: [Dialog.okButton({ label: trans.__('Dismiss') })] }); } else { - logger.log({ - level: Level.ERROR, + Notification.update({ + id, message: trans.__('Failed to switch branch.'), - error + type: 'error', + ...showError(error, trans) }); } } @@ -113,11 +112,6 @@ export interface IBranchMenuProps { */ commands: CommandRegistry; - /** - * Extension logger - */ - logger: Logger; - /** * Git extension data model. */ @@ -327,7 +321,6 @@ export class BranchMenu extends React.Component< = new Map([ - [Level.ERROR, 'error'], - [Level.WARNING, 'warning'], - [Level.SUCCESS, 'success'], - [Level.INFO, 'info'], - [Level.RUNNING, 'info'] -]); - -const VISUAL_DELAY = 1000; // in ms - -export interface IFeedbackProps { - /** - * Alert - */ - log: ILogMessage; - - /** - * Extension settings - */ - settings: ISettingRegistry.ISettings; - - /** - * The application language translator. - */ - trans: TranslationBundle; -} - -export interface IFeedbackState { - /** - * Overlay visibility - */ - blockUI: boolean; - - /** - * Log message stack - */ - logStack: ILogMessage[]; - - /** - * Last time the feedback message was changed - */ - lastUpdate: number; - - /** - * Alert visibility - */ - showAlert: boolean; -} - -/** - * Component to handle logger user feedback - */ -export class Feedback extends React.Component { - constructor(props: IFeedbackProps) { - super(props); - - this.state = { - blockUI: false, - lastUpdate: Date.now() - VISUAL_DELAY, - logStack: [], - showAlert: false - }; - } - - static getDerivedStateFromProps( - props: IFeedbackProps, - state: IFeedbackState - ): IFeedbackState { - const latestLog = state.logStack[state.logStack.length - 1]; - const now = Date.now(); - if (props.log !== latestLog) { - if (now - state.lastUpdate > VISUAL_DELAY) { - state.logStack.shift(); - } - if (latestLog && props.log.level > latestLog.level) { - // Higher level takes over - state.logStack.splice(0, 1, props.log); - state.lastUpdate = now; - } else { - state.logStack.push(props.log); - } - state.blockUI = props.settings.composite[ - 'blockWhileCommandExecutes' - ] as boolean; - state.showAlert = true; - } - return state; - } - - render(): JSX.Element { - if (this.state.logStack.length > 1) { - setTimeout(() => { - if (this.state.logStack.length > 1) { - this.setState({ - blockUI: this.props.settings.composite[ - 'blockWhileCommandExecutes' - ] as boolean, - logStack: this.state.logStack.slice(1), - lastUpdate: Date.now(), - showAlert: true - }); - } - }, VISUAL_DELAY); - } - - const log = this.state.logStack[0]; - - return ( - - { - this.setState({ blockUI: false }); - }} - /> - this.setState({ showAlert: false })} - trans={this.props.trans} - /> - - ); - } -} diff --git a/src/components/GitPanel.tsx b/src/components/GitPanel.tsx index 87da4cf31..98710b7f2 100644 --- a/src/components/GitPanel.tsx +++ b/src/components/GitPanel.tsx @@ -1,4 +1,4 @@ -import { showDialog, Dialog } from '@jupyterlab/apputils'; +import { Dialog, Notification, showDialog } from '@jupyterlab/apputils'; import { PathExt } from '@jupyterlab/coreutils'; import { FileBrowserModel } from '@jupyterlab/filebrowser'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; @@ -6,11 +6,13 @@ import { TranslationBundle } from '@jupyterlab/translation'; import { CommandRegistry } from '@lumino/commands'; import { JSONObject } from '@lumino/coreutils'; import { Signal } from '@lumino/signaling'; +import { WarningRounded as WarningRoundedIcon } from '@mui/icons-material'; import Tab from '@mui/material/Tab'; import Tabs from '@mui/material/Tabs'; import * as React from 'react'; -import { Logger } from '../logger'; import { GitExtension } from '../model'; +import { showError } from '../notifications'; +import { hiddenButtonStyle } from '../style/ActionButtonStyle'; import { panelWrapperClass, repoButtonClass, @@ -20,21 +22,19 @@ import { tabsClass, warningTextClass } from '../style/GitPanel'; -import { CommandIDs, Git, ILogMessage, Level } from '../tokens'; +import { addIcon, rewindIcon, trashIcon } from '../style/icons'; +import { CommandIDs, Git } from '../tokens'; import { openFileDiff, stopPropagationWrapper } from '../utils'; import { GitAuthorForm } from '../widgets/AuthorBox'; +import { ActionButton } from './ActionButton'; import { CommitBox } from './CommitBox'; import { CommitComparisonBox } from './CommitComparisonBox'; import { FileList } from './FileList'; +import { GitStash } from './GitStash'; import { HistorySideBar } from './HistorySideBar'; +import { RebaseAction } from './RebaseAction'; import { Toolbar } from './Toolbar'; import { WarningBox } from './WarningBox'; -import { WarningRounded as WarningRoundedIcon } from '@mui/icons-material'; -import { GitStash } from './GitStash'; -import { ActionButton } from './ActionButton'; -import { addIcon, rewindIcon, trashIcon } from '../style/icons'; -import { hiddenButtonStyle } from '../style/ActionButtonStyle'; -import { RebaseAction } from './RebaseAction'; /** * Interface describing component properties. @@ -50,11 +50,6 @@ export interface IGitPanelProps { */ filebrowser: FileBrowserModel; - /** - * Extension logger - */ - logger: Logger; - /** * Git extension data model. */ @@ -410,7 +405,6 @@ export class GitPanel extends React.Component { branching={!disableBranching} commands={this.props.commands} pastCommits={this.state.pastCommits} - logger={this.props.logger} model={this.props.model} nCommitsAhead={this.state.nCommitsAhead} nCommitsBehind={this.state.nCommitsBehind} @@ -638,7 +632,6 @@ export class GitPanel extends React.Component { challengerCommit={this.state.challengerCommit} commands={this.props.commands} model={this.props.model} - logger={this.props.logger} trans={this.props.trans} onClose={event => { event?.stopPropagation(); @@ -769,14 +762,14 @@ export class GitPanel extends React.Component { private _commitMarkedFiles = async ( message: string | null ): Promise => { - this.props.logger.log({ - level: Level.RUNNING, - message: this.props.trans.__('Staging files...') - }); + const id = Notification.emit( + this.props.trans.__('Staging files...'), + 'in-progress' + ); await this.props.model.reset(); await this.props.model.add(...this._markedFiles.map(file => file.to)); - await this._commitStagedFiles(message); + await this._commitStagedFiles(message, id); }; /** @@ -786,20 +779,23 @@ export class GitPanel extends React.Component { * @returns a promise which commits the files */ private _commitStagedFiles = async ( - message: string | null = null + message: string | null = null, + notificationId?: string ): Promise => { - const errorLog: ILogMessage = { - level: Level.ERROR, - message: this.props.trans.__('Failed to commit changes.') - }; - + const errorMsg = this.props.trans.__('Failed to commit changes.'); + let id: string | null = notificationId ?? null; try { const author = await this._hasIdentity(this.props.model.pathRepository); - this.props.logger.log({ - level: Level.RUNNING, - message: this.props.trans.__('Committing changes...') - }); + const message = this.props.trans.__('Committing changes...'); + if (id !== null) { + Notification.update({ + id, + message + }); + } else { + id = Notification.emit(message, 'in-progress'); + } if (this.state.commitAmend) { await this.props.model.commit(null, true, author); @@ -807,8 +803,9 @@ export class GitPanel extends React.Component { await this.props.model.commit(message, false, author); } - this.props.logger.log({ - level: Level.SUCCESS, + Notification.update({ + id, + type: 'success', message: this.props.trans.__('Committed changes.') }); @@ -821,7 +818,15 @@ export class GitPanel extends React.Component { await this.props.commands.execute(CommandIDs.gitPush); } } catch (error: any) { - this.props.logger.log({ ...errorLog, error }); + if (id === null) { + Notification.error(errorMsg, showError(error, this.props.trans)); + } else { + Notification.update({ + id, + message: errorMsg, + ...showError(error, this.props.trans) + }); + } throw error; } }; diff --git a/src/components/NewBranchDialog.tsx b/src/components/NewBranchDialog.tsx index aa56965f3..a266877be 100644 --- a/src/components/NewBranchDialog.tsx +++ b/src/components/NewBranchDialog.tsx @@ -1,13 +1,12 @@ +import { Notification } from '@jupyterlab/apputils'; +import { TranslationBundle } from '@jupyterlab/translation'; +import ClearIcon from '@mui/icons-material/Clear'; import Dialog from '@mui/material/Dialog'; import DialogActions from '@mui/material/DialogActions'; import ListItem from '@mui/material/ListItem'; -import ClearIcon from '@mui/icons-material/Clear'; -import { TranslationBundle } from '@jupyterlab/translation'; import * as React from 'react'; import { ListChildComponentProps, VariableSizeList } from 'react-window'; import { classes } from 'typestyle'; -import { Logger } from '../logger'; -import { branchIcon } from '../style/icons'; import { actionsWrapperClass, activeListItemClass, @@ -33,7 +32,8 @@ import { titleClass, titleWrapperClass } from '../style/NewBranchDialog'; -import { Git, IGitExtension, Level } from '../tokens'; +import { branchIcon } from '../style/icons'; +import { Git, IGitExtension } from '../tokens'; const ITEM_HEIGHT = 27.5; // HTML element height for a single branch const CURRENT_BRANCH_HEIGHT = 66.5; // HTML element height for the current branch with description @@ -53,11 +53,6 @@ export interface INewBranchDialogProps { */ branches: Git.IBranch[]; - /** - * Extension logger - */ - logger: Logger; - /** * Git extension data model. */ @@ -420,26 +415,28 @@ export class NewBranchDialog extends React.Component< startpoint: this.state.base }; - this.props.logger.log({ - level: Level.RUNNING, - message: this.props.trans.__('Creating branch…') - }); + const id = Notification.emit( + this.props.trans.__('Creating branch…'), + 'in-progress' + ); try { await this.props.model.checkout(opts); } catch (err: any) { this.setState({ error: err.message.replace(/^fatal:/, '') }); - this.props.logger.log({ - level: Level.ERROR, - message: this.props.trans.__('Failed to create branch.') + Notification.update({ + id, + message: this.props.trans.__('Failed to create branch.'), + type: 'error' }); return; } - this.props.logger.log({ - level: Level.SUCCESS, - message: this.props.trans.__('Branch created.') + Notification.update({ + id, + message: this.props.trans.__('Branch created.'), + type: 'success' }); // Close the branch dialog: this.props.onClose(); diff --git a/src/components/NewTagDialog.tsx b/src/components/NewTagDialog.tsx index 77c5e5c11..3fae67f4d 100644 --- a/src/components/NewTagDialog.tsx +++ b/src/components/NewTagDialog.tsx @@ -1,21 +1,10 @@ +import { Notification } from '@jupyterlab/apputils'; +import { TranslationBundle } from '@jupyterlab/translation'; +import ClearIcon from '@mui/icons-material/Clear'; import Dialog from '@mui/material/Dialog'; import DialogActions from '@mui/material/DialogActions'; -import ClearIcon from '@mui/icons-material/Clear'; -import { TranslationBundle } from '@jupyterlab/translation'; import * as React from 'react'; import { classes } from 'typestyle'; -import { Logger } from '../logger'; -import { - historyDialogBoxWrapperStyle, - historyDialogBoxStyle, - activeListItemClass, - commitItemBoldClass, - commitHeaderBoldClass, - commitBodyClass, - commitHeaderClass, - commitHeaderItemClass, - commitWrapperClass -} from '../style/NewTagDialog'; import { actionsWrapperClass, branchDialogClass, @@ -33,7 +22,18 @@ import { titleClass, titleWrapperClass } from '../style/NewBranchDialog'; -import { Git, IGitExtension, Level } from '../tokens'; +import { + activeListItemClass, + commitBodyClass, + commitHeaderBoldClass, + commitHeaderClass, + commitHeaderItemClass, + commitItemBoldClass, + commitWrapperClass, + historyDialogBoxStyle, + historyDialogBoxWrapperStyle +} from '../style/NewTagDialog'; +import { Git, IGitExtension } from '../tokens'; import { GitCommitGraph } from './GitCommitGraph'; /** @@ -45,11 +45,6 @@ export interface INewTagDialogProps { */ pastCommits: Git.ISingleCommitInfo[]; - /** - * Extension logger. - */ - logger: Logger; - /** * Git extension data model. */ @@ -85,11 +80,6 @@ export interface IDialogBoxCommitGraphProps { */ pastCommits: Git.ISingleCommitInfo[]; - /** - * Extension logger - */ - logger: Logger; - /** * Git extension data model. */ @@ -385,24 +375,26 @@ export const NewTagDialogBox: React.FunctionComponent = ( const tagName = nameState; const baseCommitId = baseCommitIdState; - props.logger.log({ - level: Level.RUNNING, - message: props.trans.__('Creating tag…') - }); + const id = Notification.emit( + props.trans.__('Creating tag…'), + 'in-progress' + ); try { await props.model.setTag(tagName, baseCommitId); } catch (err) { setErrorState((err as any).message.replace(/^fatal:/, '')); - props.logger.log({ - level: Level.ERROR, - message: props.trans.__('Failed to create tag.') + Notification.update({ + id, + message: props.trans.__('Failed to create tag.'), + type: 'error' }); return; } - props.logger.log({ - level: Level.SUCCESS, - message: props.trans.__('Tag created.') + Notification.update({ + id, + message: props.trans.__('Tag created.'), + type: 'success' }); // Close the tag dialog: props.onClose(); @@ -467,7 +459,6 @@ export const NewTagDialogBox: React.FunctionComponent = ( { { - this.props.logger.log({ - level: Level.RUNNING, - message: this.props.trans.__('Discarding changes…') - }); + const id = Notification.emit( + this.props.trans.__('Discarding changes…'), + 'in-progress' + ); try { await this.props.model.resetToCommit(hash); - this.props.logger.log({ - level: Level.SUCCESS, - message: this.props.trans.__('Successfully discarded changes.') + Notification.update({ + id, + message: this.props.trans.__('Successfully discarded changes.'), + type: 'success' }); } catch (error) { - this.props.logger.log({ - level: Level.ERROR, + Notification.update({ + id, message: this.props.trans.__('Failed to discard changes.'), - error: new Error( - `Failed to discard changes after ${hash.slice(0, 7)}: ${error}` + type: 'error', + ...showError( + new Error( + `Failed to discard changes after ${hash.slice(0, 7)}: ${error}` + ), + this.props.trans ) }); } @@ -251,21 +252,26 @@ export class ResetRevertDialog extends React.Component< * @param hash Git commit hash */ private async _revertCommit(hash: string): Promise { - this.props.logger.log({ - level: Level.RUNNING, - message: this.props.trans.__('Reverting changes…') - }); + const id = Notification.emit( + this.props.trans.__('Reverting changes…'), + 'in-progress' + ); try { await this.props.model.revertCommit(this._commitMessage(), hash); - this.props.logger.log({ - level: Level.SUCCESS, - message: this.props.trans.__('Successfully reverted changes.') + Notification.update({ + id, + message: this.props.trans.__('Successfully reverted changes.'), + type: 'success' }); } catch (error) { - this.props.logger.log({ - level: Level.ERROR, + Notification.update({ + id, message: this.props.trans.__('Failed to revert changes.'), - error: new Error(`Failed to revert ${hash.slice(0, 7)}: ${error}`) + type: 'error', + ...showError( + new Error(`Failed to revert ${hash.slice(0, 7)}: ${error}`), + this.props.trans + ) }); } } diff --git a/src/components/SinglePastCommitInfo.tsx b/src/components/SinglePastCommitInfo.tsx index 7f5752ba2..a7d80cde5 100644 --- a/src/components/SinglePastCommitInfo.tsx +++ b/src/components/SinglePastCommitInfo.tsx @@ -1,7 +1,6 @@ import { TranslationBundle } from '@jupyterlab/translation'; import { CommandRegistry } from '@lumino/commands'; import * as React from 'react'; -import { LoggerContext } from '../logger'; import { GitExtension } from '../model'; import { discardIcon, rewindIcon } from '../style/icons'; import { @@ -192,19 +191,14 @@ export class SinglePastCommitInfo extends React.Component< )} onClick={this._onResetClick} /> - - {logger => ( - - )} - + } numFiles={this.state.numFiles} diff --git a/src/components/SuspendModal.tsx b/src/components/SuspendModal.tsx deleted file mode 100644 index 888d84a61..000000000 --- a/src/components/SuspendModal.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import * as React from 'react'; -import Modal from '@mui/material/Modal'; -import CircularProgress from '@mui/material/CircularProgress'; -import { fullscreenProgressClass } from '../style/SuspendModal'; - -/** - * Interface describing component properties. - */ -export interface ISuspendModalProps { - /** - * Boolean indicating whether to display a modal blocking UI interaction. - */ - open: boolean; - - /** - * Callback invoked upon clicking on a modal. - */ - onClick?: (event?: any) => void; -} - -/** - * React component for rendering a modal blocking UI interaction. - */ -export class SuspendModal extends React.Component { - /** - * Returns a React component for rendering a modal. - * - * @param props - component properties - * @returns React component - */ - constructor(props: ISuspendModalProps) { - super(props); - } - - /** - * Renders the component. - * - * @returns React element - */ - render(): React.ReactElement { - return ( - -
    - -
    -
    - ); - } - - /** - * Callback invoked upon clicking on a feedback modal. - * - * @param event - event object - */ - private _onClick = (event: any): void => { - this.props.onClick && this.props.onClick(event); - }; -} diff --git a/src/components/TagMenu.tsx b/src/components/TagMenu.tsx index a98f0fa7f..af6902bfa 100644 --- a/src/components/TagMenu.tsx +++ b/src/components/TagMenu.tsx @@ -1,24 +1,29 @@ -import { Dialog, showDialog, showErrorMessage } from '@jupyterlab/apputils'; +import { + Dialog, + Notification, + showDialog, + showErrorMessage +} from '@jupyterlab/apputils'; import { TranslationBundle } from '@jupyterlab/translation'; +import ClearIcon from '@mui/icons-material/Clear'; import List from '@mui/material/List'; import ListItem from '@mui/material/ListItem'; -import ClearIcon from '@mui/icons-material/Clear'; import * as React from 'react'; import { FixedSizeList, ListChildComponentProps } from 'react-window'; -import { Logger } from '../logger'; +import { showError } from '../notifications'; import { - nameClass, filterClass, filterClearClass, filterInputClass, filterWrapperClass, listItemClass, listItemIconClass, + nameClass, newBranchButtonClass, wrapperClass } from '../style/BranchMenu'; import { tagIcon } from '../style/icons'; -import { Git, IGitExtension, Level } from '../tokens'; +import { Git, IGitExtension } from '../tokens'; import { NewTagDialogBox } from './NewTagDialog'; const ITEM_HEIGHT = 24.8; // HTML element height for a single tag @@ -30,19 +35,13 @@ const MAX_HEIGHT = 400; // Maximal HTML element height for the tags list * * @private * @param error - error - * @param logger - the logger + * @param id - notificatin id + * @param trans - Translation object */ -function onTagError( - error: any, - logger: Logger, - trans: TranslationBundle -): void { +function onTagError(error: any, id: string, trans: TranslationBundle): void { if (error.message.includes('following files would be overwritten')) { // Empty log message to hide the executing alert - logger.log({ - message: '', - level: Level.INFO - }); + Notification.dismiss(id); showDialog({ title: trans.__('Unable to checkout tag'), body: ( @@ -65,10 +64,11 @@ function onTagError( buttons: [Dialog.okButton({ label: trans.__('Dismiss') })] }); } else { - logger.log({ - level: Level.ERROR, + Notification.update({ + id, message: trans.__('Failed to checkout tag.'), - error + type: 'error', + ...showError(error, trans) }); } } @@ -103,11 +103,6 @@ export interface ITagMenuProps { */ pastCommits: Git.ISingleCommitInfo[]; - /** - * Extension logger - */ - logger: Logger; - /** * Git extension data model. */ @@ -269,7 +264,6 @@ export class TagMenu extends React.Component { return ( { return; } - this.props.logger.log({ - level: Level.RUNNING, - message: this.props.trans.__('Checking tag out…') - }); + const id = Notification.emit( + this.props.trans.__('Checking tag out…'), + 'in-progress' + ); try { await this.props.model.checkoutTag(tag); } catch (err) { - return onTagError(err, this.props.logger, this.props.trans); + return onTagError(err, id, this.props.trans); } - this.props.logger.log({ - level: Level.SUCCESS, - message: this.props.trans.__('Tag checkout.') + Notification.update({ + id, + message: this.props.trans.__('Tag checkout.'), + type: 'success' }); }; return onClick; diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index 84470b9a5..763f7d571 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -1,4 +1,6 @@ +import { Notification } from '@jupyterlab/apputils'; import { PageConfig, PathExt } from '@jupyterlab/coreutils'; +import { TranslationBundle } from '@jupyterlab/translation'; import { caretDownIcon, caretUpIcon, @@ -8,14 +10,13 @@ import { CommandRegistry } from '@lumino/commands'; import { Badge, Tab, Tabs } from '@mui/material'; import * as React from 'react'; import { classes } from 'typestyle'; -import { Logger } from '../logger'; +import { showError } from '../notifications'; import { selectedTabClass, tabClass, tabIndicatorClass, tabsClass } from '../style/GitPanel'; -import { branchIcon, desktopIcon, pullIcon, pushIcon } from '../style/icons'; import { badgeClass, spacer, @@ -30,11 +31,11 @@ import { toolbarMenuWrapperClass, toolbarNavClass } from '../style/Toolbar'; -import { CommandIDs, Git, IGitExtension, Level } from '../tokens'; +import { branchIcon, desktopIcon, pullIcon, pushIcon } from '../style/icons'; +import { CommandIDs, Git, IGitExtension } from '../tokens'; import { ActionButton } from './ActionButton'; import { BranchMenu } from './BranchMenu'; import { TagMenu } from './TagMenu'; -import { TranslationBundle } from '@jupyterlab/translation'; /** * Interface describing properties. @@ -70,11 +71,6 @@ export interface IToolbarProps { */ pastCommits: Git.ISingleCommitInfo[]; - /** - * Extension logger - */ - logger: Logger; - /** * Git extension data model. */ @@ -367,7 +363,6 @@ export class Toolbar extends React.Component { branches={this.props.branches} branching={this.props.branching} commands={this.props.commands} - logger={this.props.logger} model={this.props.model} trans={this.props.trans} /> @@ -379,7 +374,6 @@ export class Toolbar extends React.Component { { * @returns a promise which resolves upon refreshing the model */ private _onRefreshClick = async (): Promise => { - this.props.logger.log({ - level: Level.RUNNING, - message: this.props.trans.__('Refreshing…') - }); + const id = Notification.emit( + this.props.trans.__('Refreshing…'), + 'in-progress' + ); try { await this.props.model.refresh(); - this.props.logger.log({ - level: Level.SUCCESS, - message: this.props.trans.__('Successfully refreshed.') + Notification.update({ + id, + message: this.props.trans.__('Successfully refreshed.'), + type: 'success' }); } catch (error: any) { console.error(error); - this.props.logger.log({ - level: Level.ERROR, + Notification.update({ + id, message: this.props.trans.__('Failed to refresh.'), - error + type: 'error', + ...showError(error, this.props.trans) }); } }; diff --git a/src/index.ts b/src/index.ts index 038c1b812..928032747 100644 --- a/src/index.ts +++ b/src/index.ts @@ -36,7 +36,6 @@ import { IEditorLanguageRegistry } from '@jupyterlab/codemirror'; export { DiffModel } from './components/diff/model'; export { NotebookDiff } from './components/diff/NotebookDiff'; export { PlainTextDiff } from './components/diff/PlainTextDiff'; -export { logger, LoggerContext } from './logger'; export { Git, IGitExtension } from './tokens'; /** diff --git a/src/logger.ts b/src/logger.ts deleted file mode 100644 index c7056d788..000000000 --- a/src/logger.ts +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; -import { ISignal, Signal } from '@lumino/signaling'; -import { ILogMessage } from './tokens'; - -/** - * Logger - */ -export class Logger { - constructor() { - this._signal = new Signal(this); - } - - /** - * Signal emitted when a log message is sent - */ - get signal(): ISignal { - return this._signal; - } - - /** - * Send a log message. - * - * @param message Log message - */ - log(message: ILogMessage): void { - this._signal.emit(message); - } - - private _signal: Signal; -} - -/** - * Default logger - */ -export const logger = new Logger(); - -/** - * Default logger context for React - */ -export const LoggerContext = React.createContext(logger); diff --git a/src/notifications.ts b/src/notifications.ts new file mode 100644 index 000000000..63ecd4898 --- /dev/null +++ b/src/notifications.ts @@ -0,0 +1,47 @@ +import { Dialog, Notification, showErrorMessage } from '@jupyterlab/apputils'; +import { TranslationBundle } from '@jupyterlab/translation'; + +/** + * Build notification options to display in a dialog the detailed error. + * + * @param error Error object to display + * @param trans Extension translation object + * @returns Notification option to display the full error + */ +export function showError( + error: Error, + trans: TranslationBundle +): Notification.IOptions { + return { + actions: [ + { + label: trans.__('Show'), + callback: () => { + showErrorMessage(trans.__('Error'), error, [ + Dialog.warnButton({ label: trans.__('Dismiss') }) + ]); + }, + displayType: 'warn' + } as Notification.IAction + ] + }; +} + +export function showDetails( + message: string, + trans: TranslationBundle +): Notification.IOptions { + return { + actions: [ + { + label: trans.__('Details'), + callback: () => { + showErrorMessage(trans.__('Detailed message'), message, [ + Dialog.okButton({ label: trans.__('Dismiss') }) + ]); + }, + displayType: 'warn' + } as Notification.IAction + ] + }; +} diff --git a/src/tokens.ts b/src/tokens.ts index c4926333e..bcc0fc67e 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -1335,42 +1335,6 @@ export namespace Git { } } -/** - * Log message severity. - */ -export enum Level { - SUCCESS = 10, - INFO = 20, - RUNNING = 30, - WARNING = 40, - ERROR = 50 -} - -/** - * Interface describing a component log message. - */ -export interface ILogMessage { - /** - * Detailed message - */ - details?: string; - - /** - * Error object. - */ - error?: Error; - - /** - * Message level. - */ - level: Level; - - /** - * Message text. - */ - message: string; -} - /** * The command IDs used in the git context menus. */ diff --git a/src/widgets/GitWidget.tsx b/src/widgets/GitWidget.tsx index 878e4c521..7faba8b89 100644 --- a/src/widgets/GitWidget.tsx +++ b/src/widgets/GitWidget.tsx @@ -1,4 +1,4 @@ -import { ReactWidget, UseSignal } from '@jupyterlab/apputils'; +import { ReactWidget } from '@jupyterlab/apputils'; import { FileBrowserModel } from '@jupyterlab/filebrowser'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { TranslationBundle } from '@jupyterlab/translation'; @@ -7,12 +7,9 @@ import { Message } from '@lumino/messaging'; import { Widget } from '@lumino/widgets'; import { StylesProvider } from '@mui/styles'; import * as React from 'react'; -import { Feedback } from '../components/Feedback'; import { GitPanel } from '../components/GitPanel'; -import { LoggerContext } from '../logger'; import { GitExtension } from '../model'; import { gitWidgetStyle } from '../style/GitWidgetStyle'; -import { ILogMessage, Level } from '../tokens'; /** * A class that exposes the git plugin Widget. @@ -64,34 +61,13 @@ export class GitWidget extends ReactWidget { render(): JSX.Element { return ( - - {logger => ( - - - - {(sender, log) => - log?.message ? ( - - ) : null - } - - - )} - + ); } From 0636ea24e8e3a8c150758c8b5440d8aeb6cfcddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Fri, 6 Oct 2023 18:00:47 +0200 Subject: [PATCH 13/24] Improve text diff for merge --- src/components/diff/PlainTextDiff.ts | 30 ++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/components/diff/PlainTextDiff.ts b/src/components/diff/PlainTextDiff.ts index 26ed89bc4..ad4da07fa 100644 --- a/src/components/diff/PlainTextDiff.ts +++ b/src/components/diff/PlainTextDiff.ts @@ -16,7 +16,11 @@ import { diff_match_patch } from 'diff-match-patch'; import { MergeView, createNbdimeMergeView } from 'nbdime/lib/common/mergeview'; -import { IStringDiffModel, StringDiffModel } from 'nbdime/lib/diff/model'; +import { + IStringDiffModel, + StringDiffModel, + createDirectStringDiffModel +} from 'nbdime/lib/diff/model'; import { DiffRangeRaw } from 'nbdime/lib/diff/range'; import { Git } from '../../tokens'; @@ -232,16 +236,30 @@ export class PlainTextDiff extends Panel implements Git.Diff.IDiffWidget { baseContent: string | null = null ): Promise { if (!this._mergeView) { - const remote = createStringDiffModel(referenceContent, challengerContent); - - const mimetype = + const mimetypes = this._languageRegistry.findByFileName(this._model.filename)?.mime ?? this._languageRegistry.findBest(this._model.filename)?.mime ?? IEditorMimeTypeService.defaultMimeType; - remote.mimetype = Array.isArray(mimetype) ? mimetype[0] : mimetype; + const mimetype = Array.isArray(mimetypes) ? mimetypes[0] : mimetypes; + + let remote: IStringDiffModel; + let local: IStringDiffModel | undefined = undefined; + let merged: IStringDiffModel | undefined = undefined; + if (baseContent !== null) { + remote = createStringDiffModel(baseContent, referenceContent); + local = createStringDiffModel(baseContent, challengerContent); + local.mimetype = mimetype; + merged = createDirectStringDiffModel(baseContent, baseContent); + merged.mimetype = mimetype; + } else { + remote = createStringDiffModel(referenceContent, challengerContent); + } + remote.mimetype = mimetype; this._mergeView = createNbdimeMergeView({ - remote + remote, + local, + merged // factory: this._editorFactory }); this._mergeView.addClass('jp-git-PlainText-diff'); From b1c0afcdfb1ce673581a9a71f1a53c7deb9c7eae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Mon, 9 Oct 2023 16:39:00 +0200 Subject: [PATCH 14/24] Fix lots of styling issues --- src/components/CommitComparisonBox.tsx | 6 +++++- src/components/GitStage.tsx | 4 ++-- src/components/GitStash.tsx | 14 +++++++------- src/components/Toolbar.tsx | 17 +++++++++++++---- src/style/ActionButtonStyle.ts | 3 ++- src/style/CommitBox.ts | 15 +++++++-------- src/style/GitPanel.ts | 7 ++----- src/style/GitStageStyle.ts | 2 -- src/style/GitStashStyle.ts | 4 ++-- src/style/HistorySideBarStyle.ts | 1 + src/style/NewBranchDialog.ts | 16 ++++++++++++++-- src/style/PastCommitNode.ts | 7 ++----- src/style/ResetRevertDialog.ts | 8 +++++++- src/style/SinglePastCommitInfo.ts | 3 ++- src/style/Toolbar.ts | 9 ++++++++- src/widgets/GitWidget.tsx | 17 +++++++---------- 16 files changed, 81 insertions(+), 52 deletions(-) diff --git a/src/components/CommitComparisonBox.tsx b/src/components/CommitComparisonBox.tsx index 6df86606e..769ed3ff0 100644 --- a/src/components/CommitComparisonBox.tsx +++ b/src/components/CommitComparisonBox.tsx @@ -147,7 +147,11 @@ export function CommitComparisonBox( onClick={() => setCollapsed(!collapsed)} > {props.header} diff --git a/src/components/GitStage.tsx b/src/components/GitStage.tsx index 3f7fe3edf..97a560044 100644 --- a/src/components/GitStage.tsx +++ b/src/components/GitStage.tsx @@ -67,9 +67,9 @@ export const GitStage: React.FunctionComponent = ( {props.collapsible && ( )} diff --git a/src/components/GitStash.tsx b/src/components/GitStash.tsx index 01c489eb7..c935daf55 100644 --- a/src/components/GitStash.tsx +++ b/src/components/GitStash.tsx @@ -133,16 +133,16 @@ const GitStashEntry: React.FunctionComponent = ( {props.collapsible && ( )} -

    + {props.trans.__('%1 (on %2)', props.message, props.branch)} -

    +
    {props.actions}
    @@ -230,14 +230,14 @@ export const GitStash: React.FunctionComponent = ( {props.collapsible && ( )} -

    {props.trans.__('Stash')}

    + {props.trans.__('Stash')} {props.actions} { PageConfig.getOption('serverRoot') + '/' + this.props.repository )} > - +

    {this.props.trans.__('Current Repository')} @@ -297,7 +300,7 @@ export class Toolbar extends React.Component { title={this.props.trans.__('Manage branches and tags')} onClick={this._onBranchClick} > - +

    {branchTitle}

    @@ -305,9 +308,15 @@ export class Toolbar extends React.Component {

    {this.state.branchMenu ? ( - + ) : ( - + )} {this.state.branchMenu ? this._renderTabs() : null} diff --git a/src/style/ActionButtonStyle.ts b/src/style/ActionButtonStyle.ts index 87e729609..e457370ba 100644 --- a/src/style/ActionButtonStyle.ts +++ b/src/style/ActionButtonStyle.ts @@ -5,11 +5,12 @@ export const actionButtonStyle = style({ flex: '0 0 auto', background: 'none', lineHeight: '0px', - padding: '0px 4px', + padding: '0px 0px', width: '16px', border: 'none', outline: 'none', cursor: 'pointer', + margin: '0 4px', $nest: { '&:active': { diff --git a/src/style/CommitBox.ts b/src/style/CommitBox.ts index c4f0de1ac..683f22e8d 100644 --- a/src/style/CommitBox.ts +++ b/src/style/CommitBox.ts @@ -63,7 +63,7 @@ export const commitSummaryClass = style({ export const commitDescriptionClass = style({ marginBottom: '1em', - padding: 'var(--jp-code-padding)', + padding: 'var(--jp-code-padding) !important', outline: 'none', overflowX: 'auto', @@ -89,13 +89,12 @@ export const commitDescriptionClass = style({ }); export const commitButtonClass = style({ - cursor: 'pointer', - color: 'var(--jp-ui-inverse-font-color1)', - backgroundColor: 'var(--jp-brand-color1)', + color: 'var(--jp-ui-inverse-font-color1) !important', + backgroundColor: 'var(--jp-brand-color1) !important', $nest: { '&:hover': { - backgroundColor: 'var(--jp-brand-color2)' + backgroundColor: 'var(--jp-brand-color2) !important' } } }); @@ -129,9 +128,9 @@ export const commitVariantText = style({ }); export const commitRoot = style({ - color: 'var(--jp-ui-font-color1)', - fontSize: 'var(--jp-ui-font-size1)', - fontFamily: 'var(--jp-ui-font-family)', + color: 'var(--jp-ui-font-color1) !important', + fontSize: 'var(--jp-ui-font-size1) !important', + fontFamily: 'var(--jp-ui-font-family) !important', backgroundColor: 'var(--jp-layout-color1)' }); diff --git a/src/style/GitPanel.ts b/src/style/GitPanel.ts index 7da250553..d64e7b402 100644 --- a/src/style/GitPanel.ts +++ b/src/style/GitPanel.ts @@ -60,11 +60,8 @@ export const tabClass = style({ 'var(--jp-border-width) solid var(--jp-border-color2)!important', borderRight: 'var(--jp-border-width) solid var(--jp-border-color2)!important', - $nest: { - span: { - textTransform: 'none' - } - } + // @ts-expect-error unknown value + textTransform: 'none !important' }); export const selectedTabClass = style({ diff --git a/src/style/GitStageStyle.ts b/src/style/GitStageStyle.ts index 2994dae3d..c9938dfb5 100644 --- a/src/style/GitStageStyle.ts +++ b/src/style/GitStageStyle.ts @@ -7,7 +7,6 @@ export const sectionAreaStyle = style( display: 'flex', flexDirection: 'row', alignItems: 'center', - margin: '4px 0px', padding: '4px', fontWeight: 600, borderBottom: 'var(--jp-border-width) solid var(--jp-border-color2)', @@ -63,7 +62,6 @@ export const changeStageButtonStyle = style({ flex: '0 0 auto', backgroundColor: 'transparent', height: '13px', - width: '12px', border: 'none', outline: 'none', paddingLeft: '0px' diff --git a/src/style/GitStashStyle.ts b/src/style/GitStashStyle.ts index de1d34151..6f8c6eff6 100644 --- a/src/style/GitStashStyle.ts +++ b/src/style/GitStashStyle.ts @@ -41,10 +41,10 @@ export const listStyle = style({ } } }); + export const stashEntryMessageStyle = style({ textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap', - display: 'inline-block', - maxWidth: 'calc(100% - 100px)' // Adjust this value based on the space required for the action buttons + display: 'inline-block' }); diff --git a/src/style/HistorySideBarStyle.ts b/src/style/HistorySideBarStyle.ts index e316dba10..d701950e6 100644 --- a/src/style/HistorySideBarStyle.ts +++ b/src/style/HistorySideBarStyle.ts @@ -33,6 +33,7 @@ export const historySideBarStyle = style({ marginBlockStart: 0, marginBlockEnd: 0, paddingLeft: 0, + paddingRight: '8px', overflowY: 'auto' }); diff --git a/src/style/NewBranchDialog.ts b/src/style/NewBranchDialog.ts index a9929780a..1a4b73024 100644 --- a/src/style/NewBranchDialog.ts +++ b/src/style/NewBranchDialog.ts @@ -44,7 +44,13 @@ export const titleWrapperClass = style({ padding: '15px', - borderBottom: 'var(--jp-border-width) solid var(--jp-border-color2)' + borderBottom: 'var(--jp-border-width) solid var(--jp-border-color2)', + + $nest: { + '& > p': { + margin: 0 + } + } }); export const titleClass = style({ @@ -207,7 +213,13 @@ export const listItemContentClass = style({ marginTop: 'auto', marginBottom: 'auto', - marginRight: 'auto' + marginRight: 'auto', + + $nest: { + '& > p': { + margin: 0 + } + } }); export const listItemDescClass = style({ diff --git a/src/style/PastCommitNode.ts b/src/style/PastCommitNode.ts index cd1acad57..7ce55c9f8 100644 --- a/src/style/PastCommitNode.ts +++ b/src/style/PastCommitNode.ts @@ -69,11 +69,8 @@ export const commitBodyClass = style({ }); export const iconButtonClass = style({ - width: '16px', - height: '16px', - - /* top | right | bottom | left */ - margin: 'auto 8px auto auto' + // width: '16px', + // height: '16px' }); export const singleFileCommitClass = style({ diff --git a/src/style/ResetRevertDialog.ts b/src/style/ResetRevertDialog.ts index d741205bb..a83cb2b75 100644 --- a/src/style/ResetRevertDialog.ts +++ b/src/style/ResetRevertDialog.ts @@ -45,7 +45,13 @@ export const titleWrapperClass = style({ padding: '15px', - borderBottom: 'var(--jp-border-width) solid var(--jp-border-color2)' + borderBottom: 'var(--jp-border-width) solid var(--jp-border-color2)', + + $nest: { + '& > p': { + margin: '0' + } + } }); export const titleClass = style({ diff --git a/src/style/SinglePastCommitInfo.ts b/src/style/SinglePastCommitInfo.ts index 2a9c948df..86aef6010 100644 --- a/src/style/SinglePastCommitInfo.ts +++ b/src/style/SinglePastCommitInfo.ts @@ -97,5 +97,6 @@ export const actionButtonClass = style({ export const commitBodyClass = style({ paddingTop: '5px', whiteSpace: 'pre-wrap', - wordWrap: 'break-word' + wordWrap: 'break-word', + margin: '0' }); diff --git a/src/style/Toolbar.ts b/src/style/Toolbar.ts index c1b6e512e..36f95aacf 100644 --- a/src/style/Toolbar.ts +++ b/src/style/Toolbar.ts @@ -73,7 +73,14 @@ export const toolbarMenuButtonTitleWrapperClass = style({ marginTop: 'auto', marginBottom: 'auto', - marginRight: 'auto' + marginRight: 'auto', + + $nest: { + '& > p': { + marginTop: 0, + marginBottom: 0 + } + } }); export const toolbarMenuButtonTitleClass = style({}); diff --git a/src/widgets/GitWidget.tsx b/src/widgets/GitWidget.tsx index 7faba8b89..98b706fe7 100644 --- a/src/widgets/GitWidget.tsx +++ b/src/widgets/GitWidget.tsx @@ -5,7 +5,6 @@ import { TranslationBundle } from '@jupyterlab/translation'; import { CommandRegistry } from '@lumino/commands'; import { Message } from '@lumino/messaging'; import { Widget } from '@lumino/widgets'; -import { StylesProvider } from '@mui/styles'; import * as React from 'react'; import { GitPanel } from '../components/GitPanel'; import { GitExtension } from '../model'; @@ -60,15 +59,13 @@ export class GitWidget extends ReactWidget { */ render(): JSX.Element { return ( - - - + ); } From 6241ad2e3041e54c705705246ffe0ba71976eca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Mon, 9 Oct 2023 17:01:06 +0200 Subject: [PATCH 15/24] Fix notebook widget API --- src/components/diff/NotebookDiff.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/components/diff/NotebookDiff.ts b/src/components/diff/NotebookDiff.ts index 9566afb1f..d12207b29 100644 --- a/src/components/diff/NotebookDiff.ts +++ b/src/components/diff/NotebookDiff.ts @@ -300,10 +300,7 @@ export class NotebookDiff extends Panel implements Git.Diff.IDiffWidget { }); const model = new NotebookDiffModel(data.base, data.diff); - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return new NotebookDiffWidget(model, this._renderMime); + return new NotebookDiffWidget({ model, rendermime: this._renderMime }); } protected async createMergeView( @@ -318,10 +315,7 @@ export class NotebookDiff extends Panel implements Git.Diff.IDiffWidget { }); const model = new NotebookMergeModel(data.base, data.merge_decisions); - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return new NotebookMergeWidget(model, this._renderMime); + return new NotebookMergeWidget({ model, rendermime: this._renderMime }); } /** From 49650ac36fba3730932d42abc291d307eb8a8f92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Mon, 9 Oct 2023 18:04:05 +0200 Subject: [PATCH 16/24] Set notification autoClose to get similar behavior --- schema/plugin.json | 4 +--- src/cloneCommand.tsx | 4 +++- src/commandsAndMenu.tsx | 32 ++++++++++++++++++++-------- src/components/BranchMenu.tsx | 6 ++++-- src/components/GitPanel.tsx | 11 ++++++---- src/components/NewBranchDialog.tsx | 9 +++++--- src/components/NewTagDialog.tsx | 9 +++++--- src/components/ResetRevertDialog.tsx | 12 +++++++---- src/components/TagMenu.tsx | 6 ++++-- src/components/Toolbar.tsx | 6 ++++-- src/notifications.ts | 2 ++ 11 files changed, 68 insertions(+), 33 deletions(-) diff --git a/schema/plugin.json b/schema/plugin.json index cafb178ff..da4b654ae 100644 --- a/schema/plugin.json +++ b/schema/plugin.json @@ -192,8 +192,6 @@ "domain": "jupyterlab_git" }, "jupyter.lab.toolbars": { - "FileBrowser": [ - { "name": "gitClone", "rank": 31 } - ] + "FileBrowser": [{ "name": "gitClone", "rank": 31 }] } } diff --git a/src/cloneCommand.tsx b/src/cloneCommand.tsx index 8f11d00f2..28484a7e9 100644 --- a/src/cloneCommand.tsx +++ b/src/cloneCommand.tsx @@ -60,7 +60,9 @@ export const gitCloneCommandPlugin: JupyterFrontEndPlugin = { }); if (result.button.accept && result.value?.url) { - const id = Notification.emit(trans.__('Cloning…'), 'in-progress'); + const id = Notification.emit(trans.__('Cloning…'), 'in-progress', { + autoClose: false + }); try { const details = await showGitOperationDialog( gitModel as GitExtension, diff --git a/src/commandsAndMenu.tsx b/src/commandsAndMenu.tsx index 7486714d0..64c35cb1b 100644 --- a/src/commandsAndMenu.tsx +++ b/src/commandsAndMenu.tsx @@ -221,14 +221,17 @@ export function addCommands( }); if (result.button.accept) { - const id = Notification.emit(trans.__('Initializing…'), 'in-progress'); + const id = Notification.emit(trans.__('Initializing…'), 'in-progress', { + autoClose: false + }); try { await gitModel.init(currentPath); gitModel.pathRepository = currentPath; Notification.update({ id, message: trans.__('Git repository initialized.'), - type: 'success' + type: 'success', + autoClose: 5000 }); } catch (error) { console.error( @@ -350,7 +353,9 @@ export function addCommands( } } - id = Notification.emit(trans.__('Pushing…'), 'in-progress'); + id = Notification.emit(trans.__('Pushing…'), 'in-progress', { + autoClose: false + }); const details = await showGitOperationDialog( gitModel, force ? Operation.ForcePush : Operation.Push, @@ -411,7 +416,9 @@ export function addCommands( if (args.force) { await discardAllChanges(gitModel, trans, args.fallback as boolean); } - id = Notification.emit(trans.__('Pulling…'), 'in-progress'); + id = Notification.emit(trans.__('Pulling…'), 'in-progress', { + autoClose: false + }); const details = await showGitOperationDialog( gitModel, Operation.Pull, @@ -509,7 +516,9 @@ export function addCommands( if (id) { Notification.update({ id, message }); } else { - id = Notification.emit(message, 'in-progress'); + id = Notification.emit(message, 'in-progress', { + autoClose: false + }); } await gitModel.resetToCommit(gitModel.status.remote ?? undefined); @@ -939,7 +948,9 @@ export function addCommands( } })(action) ?? ''; - const id = Notification.emit(message, 'in-progress'); + const id = Notification.emit(message, 'in-progress', { + autoClose: false + }); try { await gitModel.resolveRebase(action as any); } catch (err) { @@ -977,7 +988,8 @@ export function addCommands( Notification.update({ id, type: 'success', - message: message_ + message: message_, + autoClose: 5000 }); } }, @@ -1000,7 +1012,8 @@ export function addCommands( if (stashDialog.button.accept) { const id = Notification.emit( trans.__('Stashing changes'), - 'in-progress' + 'in-progress', + { autoClose: false } ); try { await gitModel.stashChanges(stashMsg); @@ -1008,7 +1021,8 @@ export function addCommands( Notification.update({ id, message: trans.__('Successfully stashed'), - type: 'success' + type: 'success', + autoClose: 5000 }); } catch (error: any) { console.error( diff --git a/src/components/BranchMenu.tsx b/src/components/BranchMenu.tsx index 12ef671ff..ba2222b85 100644 --- a/src/components/BranchMenu.tsx +++ b/src/components/BranchMenu.tsx @@ -446,7 +446,8 @@ export class BranchMenu extends React.Component< const id = Notification.emit( this.props.trans.__('Switching branch…'), - 'in-progress' + 'in-progress', + { autoClose: false } ); try { @@ -458,7 +459,8 @@ export class BranchMenu extends React.Component< Notification.update({ id, message: this.props.trans.__('Switched branch.'), - type: 'success' + type: 'success', + autoClose: 5000 }); }; diff --git a/src/components/GitPanel.tsx b/src/components/GitPanel.tsx index 98710b7f2..ff0f26658 100644 --- a/src/components/GitPanel.tsx +++ b/src/components/GitPanel.tsx @@ -764,7 +764,8 @@ export class GitPanel extends React.Component { ): Promise => { const id = Notification.emit( this.props.trans.__('Staging files...'), - 'in-progress' + 'in-progress', + { autoClose: false } ); await this.props.model.reset(); await this.props.model.add(...this._markedFiles.map(file => file.to)); @@ -791,10 +792,11 @@ export class GitPanel extends React.Component { if (id !== null) { Notification.update({ id, - message + message, + autoClose: false }); } else { - id = Notification.emit(message, 'in-progress'); + id = Notification.emit(message, 'in-progress', { autoClose: false }); } if (this.state.commitAmend) { @@ -806,7 +808,8 @@ export class GitPanel extends React.Component { Notification.update({ id, type: 'success', - message: this.props.trans.__('Committed changes.') + message: this.props.trans.__('Committed changes.'), + autoClose: 5000 }); const hasRemote = this.props.model.branches.some( diff --git a/src/components/NewBranchDialog.tsx b/src/components/NewBranchDialog.tsx index a266877be..9c3800578 100644 --- a/src/components/NewBranchDialog.tsx +++ b/src/components/NewBranchDialog.tsx @@ -417,7 +417,8 @@ export class NewBranchDialog extends React.Component< const id = Notification.emit( this.props.trans.__('Creating branch…'), - 'in-progress' + 'in-progress', + { autoClose: false } ); try { await this.props.model.checkout(opts); @@ -428,7 +429,8 @@ export class NewBranchDialog extends React.Component< Notification.update({ id, message: this.props.trans.__('Failed to create branch.'), - type: 'error' + type: 'error', + autoClose: false }); return; } @@ -436,7 +438,8 @@ export class NewBranchDialog extends React.Component< Notification.update({ id, message: this.props.trans.__('Branch created.'), - type: 'success' + type: 'success', + autoClose: 5000 }); // Close the branch dialog: this.props.onClose(); diff --git a/src/components/NewTagDialog.tsx b/src/components/NewTagDialog.tsx index 3fae67f4d..714405d18 100644 --- a/src/components/NewTagDialog.tsx +++ b/src/components/NewTagDialog.tsx @@ -377,7 +377,8 @@ export const NewTagDialogBox: React.FunctionComponent = ( const id = Notification.emit( props.trans.__('Creating tag…'), - 'in-progress' + 'in-progress', + { autoClose: false } ); try { await props.model.setTag(tagName, baseCommitId); @@ -386,7 +387,8 @@ export const NewTagDialogBox: React.FunctionComponent = ( Notification.update({ id, message: props.trans.__('Failed to create tag.'), - type: 'error' + type: 'error', + autoClose: false }); return; } @@ -394,7 +396,8 @@ export const NewTagDialogBox: React.FunctionComponent = ( Notification.update({ id, message: props.trans.__('Tag created.'), - type: 'success' + type: 'success', + autoClose: 5000 }); // Close the tag dialog: props.onClose(); diff --git a/src/components/ResetRevertDialog.tsx b/src/components/ResetRevertDialog.tsx index b43c48f31..a5d552a73 100644 --- a/src/components/ResetRevertDialog.tsx +++ b/src/components/ResetRevertDialog.tsx @@ -222,14 +222,16 @@ export class ResetRevertDialog extends React.Component< private async _resetCommit(hash: string): Promise { const id = Notification.emit( this.props.trans.__('Discarding changes…'), - 'in-progress' + 'in-progress', + { autoClose: false } ); try { await this.props.model.resetToCommit(hash); Notification.update({ id, message: this.props.trans.__('Successfully discarded changes.'), - type: 'success' + type: 'success', + autoClose: 5000 }); } catch (error) { Notification.update({ @@ -254,14 +256,16 @@ export class ResetRevertDialog extends React.Component< private async _revertCommit(hash: string): Promise { const id = Notification.emit( this.props.trans.__('Reverting changes…'), - 'in-progress' + 'in-progress', + { autoClose: false } ); try { await this.props.model.revertCommit(this._commitMessage(), hash); Notification.update({ id, message: this.props.trans.__('Successfully reverted changes.'), - type: 'success' + type: 'success', + autoClose: 5000 }); } catch (error) { Notification.update({ diff --git a/src/components/TagMenu.tsx b/src/components/TagMenu.tsx index af6902bfa..a7f29ec1a 100644 --- a/src/components/TagMenu.tsx +++ b/src/components/TagMenu.tsx @@ -347,7 +347,8 @@ export class TagMenu extends React.Component { const id = Notification.emit( this.props.trans.__('Checking tag out…'), - 'in-progress' + 'in-progress', + { autoClose: false } ); try { @@ -359,7 +360,8 @@ export class TagMenu extends React.Component { Notification.update({ id, message: this.props.trans.__('Tag checkout.'), - type: 'success' + type: 'success', + autoClose: 5000 }); }; return onClick; diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index 73fc17d22..2e0694415 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -431,7 +431,8 @@ export class Toolbar extends React.Component { private _onRefreshClick = async (): Promise => { const id = Notification.emit( this.props.trans.__('Refreshing…'), - 'in-progress' + 'in-progress', + { autoClose: false } ); try { await this.props.model.refresh(); @@ -439,7 +440,8 @@ export class Toolbar extends React.Component { Notification.update({ id, message: this.props.trans.__('Successfully refreshed.'), - type: 'success' + type: 'success', + autoClose: 5000 }); } catch (error: any) { console.error(error); diff --git a/src/notifications.ts b/src/notifications.ts index 63ecd4898..506683e7f 100644 --- a/src/notifications.ts +++ b/src/notifications.ts @@ -13,6 +13,7 @@ export function showError( trans: TranslationBundle ): Notification.IOptions { return { + autoClose: false, actions: [ { label: trans.__('Show'), @@ -32,6 +33,7 @@ export function showDetails( trans: TranslationBundle ): Notification.IOptions { return { + autoClose: 5000, actions: [ { label: trans.__('Details'), From 8e3c493d0e111cdf27fdef3e6e60938a91d4e2c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Tue, 17 Oct 2023 14:23:34 +0200 Subject: [PATCH 17/24] Improve styling --- package.json | 4 +- pyproject.toml | 2 +- src/components/diff/NotebookDiff.ts | 3 +- src/components/diff/PlainTextDiff.ts | 5 +- style/base.css | 4 +- style/diff-common.css | 125 +++++++++--------- style/diff-nb.css | 191 --------------------------- style/diff-text.css | 132 ------------------ style/variables.css | 3 + yarn.lock | 22 +-- 10 files changed, 86 insertions(+), 405 deletions(-) delete mode 100644 style/diff-nb.css delete mode 100644 style/diff-text.css diff --git a/package.json b/package.json index 3f6d39b3b..d295a5282 100644 --- a/package.json +++ b/package.json @@ -89,8 +89,8 @@ "@mui/styles": "^5.12.0", "diff-match-patch": "^1.0.4", "filesize": "^10.0.7", - "nbdime": "^7.0.0-alpha.0", - "nbdime-jupyterlab": "^3.0.0-alpha.0", + "nbdime": "^7.0.0-alpha.2", + "nbdime-jupyterlab": "^3.0.0-alpha.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-virtualized-auto-sizer": "^1.0.2", diff --git a/pyproject.toml b/pyproject.toml index 8216592e0..aeaa670d7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ classifiers = [ ] dependencies = [ "jupyter_server>=2.0.1,<3", - "nbdime~=4.0.0a0", + "nbdime~=4.0.0a1", "nbformat", "packaging", "pexpect", diff --git a/src/components/diff/NotebookDiff.ts b/src/components/diff/NotebookDiff.ts index d12207b29..79e624756 100644 --- a/src/components/diff/NotebookDiff.ts +++ b/src/components/diff/NotebookDiff.ts @@ -379,11 +379,10 @@ namespace Private { node.className = 'jp-git-diff-header'; node.innerHTML = `
    ${localLabel} - ${ hasConflict ? // Add extra space during notebook merge view - `${baseLabel}` + `${baseLabel}` : '' } ${remoteLabel} diff --git a/src/components/diff/PlainTextDiff.ts b/src/components/diff/PlainTextDiff.ts index ad4da07fa..a37cb1a83 100644 --- a/src/components/diff/PlainTextDiff.ts +++ b/src/components/diff/PlainTextDiff.ts @@ -220,7 +220,7 @@ export class PlainTextDiff extends Panel implements Git.Diff.IDiffWidget { head.innerHTML = labels .filter(label => !!label) .map(label => `${label}`) - .join(''); + .join(''); return head; } @@ -259,8 +259,9 @@ export class PlainTextDiff extends Panel implements Git.Diff.IDiffWidget { this._mergeView = createNbdimeMergeView({ remote, local, - merged + merged, // factory: this._editorFactory + showBase: false }); this._mergeView.addClass('jp-git-PlainText-diff'); diff --git a/style/base.css b/style/base.css index c01197a80..19c037198 100644 --- a/style/base.css +++ b/style/base.css @@ -3,11 +3,9 @@ | Distributed under the terms of the Modified BSD License. |---------------------------------------------------------------------------- */ +@import url('variables.css'); @import url('credentials-box.css'); @import url('diff-common.css'); -@import url('diff-nb.css'); -@import url('diff-text.css'); -@import url('variables.css'); @import url('status-widget.css'); @import url('advanced-push-form.css'); diff --git a/style/diff-common.css b/style/diff-common.css index de590ce69..ea90b3b54 100644 --- a/style/diff-common.css +++ b/style/diff-common.css @@ -24,6 +24,10 @@ overflow: hidden; } +.jp-git-diff-root .cm-editor { + height: 100%; +} + button.jp-git-diff-refresh { border: solid 1px var(--jp-warn-color2); } @@ -44,35 +48,58 @@ button.jp-git-diff-resolve .jp-ToolbarButtonComponent-label { .jp-git-merge-banner { flex: 0 0 auto; margin: 2px 0; - display: flex; + display: grid; + grid-auto-rows: minmax(18px, auto); + width: 100%; +} + +.jp-git-diff-banner { + grid-template-columns: 47% 6% 47%; } .jp-git-diff-banner span { padding: 0 4px; - width: 47%; font-weight: bold; + + overflow: hidden; + text-overflow: ellipsis; } -.jp-git-diff-banner span.jp-spacer { - width: 6%; +.jp-git-diff-banner span:first-child { + grid-column: 1; } -.jp-git-merge-banner span { - padding: 0 4px; - width: 31%; - font-weight: bold; +.jp-git-diff-banner span:last-child { + grid-column: 3; } .jp-git-diff-banner span:first-of-type { - background-color: var(--jp-git-diff-deleted-color); + background-color: var(--jp-git-diff-deleted-color1); } .jp-git-diff-banner span:last-of-type { - background-color: var(--jp-git-diff-added-color); + background-color: var(--jp-git-diff-added-color1); } -.jp-git-merge-banner span.jp-spacer { - width: 3.5%; +.jp-git-merge-banner { + grid-template-columns: repeat(3, 1fr); + gap: 10px; +} + +.jp-git-merge-banner span { + padding: 0 4px; + font-weight: bold; + + overflow: hidden; + text-overflow: ellipsis; +} + +.jp-git-merge-banner span:first-of-type { + background-color: var(--jp-merge-local-color1); +} + +.jp-git-merge-banner span:last-of-type { + background-color: var(--jp-git-diff-added-color1); } .jp-git-diff-root .cm-merge { @@ -106,71 +133,35 @@ button.jp-git-diff-resolve .jp-ToolbarButtonComponent-label { vertical-align: top; } -.jp-git-diff-root .cm-merge-1pane .cm-merge-gap { - width: 6%; -} - -.jp-git-diff-root .cm-merge-2pane .cm-merge-pane { - width: 47%; -} - -.jp-git-diff-root .cm-merge-2pane .cm-merge-gap { - width: 6%; -} - -.jp-git-diff-root .cm-merge-3pane .cm-merge-pane { - width: 31%; -} - -.jp-git-diff-root .cm-merge-3pane .cm-merge-gap { - width: 3.5%; -} - .jp-git-diff-root .cm-merge-pane-rightmost { position: absolute; right: 0; z-index: 1; } -.jp-git-diff-root .cm-merge-scrolllock-wrap { - position: absolute; - bottom: 0; - left: 50%; -} - -.jp-git-diff-root .cm-merge-scrolllock { - position: relative; - left: -50%; - cursor: pointer; - line-height: 1; -} - -.jp-git-diff-root .cm-merge-r-inserted, -.jp-git-diff-root .cm-merge-l-inserted { - background-color: var(--jp-git-diff-added-color); +.jp-Notebook-merge .jp-Merge-conflict { + background-color: var(--jp-merge-both-color2); } .jp-git-diff-root .cm-merge-r-deleted, -.jp-git-diff-root .cm-merge-l-deleted { +.jp-git-diff-root .cm-merge-l-deleted, +.jp-git-diff-root .cm-diff-left-editor .cm-merge-r-chunk { background-color: var(--jp-git-diff-deleted-color); } -.jp-git-diff-root .cm-merge-collapsed-widget::before { - content: '(...)'; +.jp-git-diff-root .cm-merge-left-editor .cm-merge-l-chunk:not(.jp-Merge-conflict) { + background-color: var(--jp-merge-local-color); } -.jp-git-diff-root .cm-merge-collapsed-widget { - cursor: pointer; - color: var(--jp-ui-font-color1); - background: var(--jp-layout-color2); - border: 1px solid var(--jp-border-color1); - font-size: 90%; - padding: 0 3px; - border-radius: 4px; +.jp-git-diff-root .cm-merge-left-editor .cm-merge-l-inserted { + background-color: var(--jp-merge-local-color1); } -.jp-git-diff-root .cm-merge-collapsed-line .cm-gutter-elt { - display: none; +.jp-git-diff-root .cm-merge-r-inserted, +.jp-git-diff-root .cm-merge-l-inserted, +.jp-git-diff-root .cm-diff-right-editor .cm-merge-r-chunk, +.jp-git-diff-root .cm-merge-right-editor .cm-merge-r-chunk { + background-color: var(--jp-git-diff-added-color); } .jp-git-diff-root .cm-merge-spacer { @@ -182,3 +173,15 @@ button.jp-git-diff-resolve .jp-ToolbarButtonComponent-label { var(--jp-border-color0) 12px ); } + +/* Hide drag handles */ +.jp-git-diff-root .jp-Notebook-merge .jp-DragPanel-dragHandle { + display: none; +} + +.jp-git-diff-parent-widget .jp-Merge-notebook-controls { + margin-bottom: 0; + padding: 0; + background-color: transparent; + border: none; +} diff --git a/style/diff-nb.css b/style/diff-nb.css deleted file mode 100644 index 77e950752..000000000 --- a/style/diff-nb.css +++ /dev/null @@ -1,191 +0,0 @@ -/* ----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Distributed under the terms of the Modified BSD License. -|---------------------------------------------------------------------------- */ - -.jp-git-diff-root .jp-git-diff-header { - flex: 0 0 auto; -} - -.jp-git-diff-root .nbdime-root { - border: var(--codemirror-border); -} - -.jp-git-diff-root .jp-Notebook-diff .jp-Metadata-diff, -.jp-git-diff-root .jp-Notebook-merge .jp-Metadata-diff { - border: none; -} - -.jp-git-diff-root .jp-Notebook-diff .cm-merge-r-chunk-end, -.jp-git-diff-root .jp-Notebook-diff .cm-merge-l-chunk-end, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-l-chunk-end, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-r-chunk-end, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-m-chunk-end-local, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-m-chunk-end-remote { - border-bottom: none; -} - -.jp-git-diff-root .jp-Notebook-diff .cm-merge-r-chunk-start, -.jp-git-diff-root .jp-Notebook-diff .cm-merge-l-chunk-start, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-l-chunk-start, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-r-chunk-start, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-m-chunk-start-local, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-m-chunk-start-remote { - border-top: none; -} - -.jp-git-diff-root .jp-Notebook-diff .cm-merge-r-chunk, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-r-chunk { - background-color: var(--jp-git-diff-deleted-color); -} - -.jp-git-diff-root .jp-Notebook-diff .cm-merge-pane-remote .cm-merge-r-chunk { - background-color: var(--jp-git-diff-added-color); -} - -.jp-git-diff-root .jp-Notebook-diff .cm-merge-spacer, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-spacer, -.jp-git-diff-root .jp-Notebook-diff .cm-merge-pane-remote .cm-merge-spacer, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-pane-remote .cm-merge-spacer { - background-color: transparent; -} - -.jp-git-diff-root .jp-Diff-added .cm, -.jp-git-diff-root .jp-Diff-added .jp-Diff-renderedOutput, -.jp-git-diff-root .jp-Cellrow-outputs .jp-Diff-twoway .jp-Diff-remote { - background-color: var(--jp-git-diff-added-color); - border: none; -} - -.jp-git-diff-root .jp-Diff-deleted .cm, -.jp-git-diff-root .jp-Diff-deleted .jp-Diff-renderedOutput, -.jp-git-diff-root .jp-Cellrow-outputs .jp-Diff-twoway .jp-Diff-base { - background-color: var(--jp-git-diff-deleted-color); - border: none; -} - -/* Specific rules for the notebook merge conflict */ -.jp-git-diff-root .jp-Notebook-merge .jp-Merge-conflict, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-l-chunk, -.jp-git-diff-root .jp-Notebook-merge .cm-merge-l-chunk.cm-merge-r-chunk, -.jp-git-diff-root - .jp-Notebook-merge - .jp-Cellrow-outputs.jp-conflicted-outputs - .jp-CollapsiblePanel-header { - background-color: var(--jp-git-diff-deleted-color); -} - -.jp-git-diff-root .jp-Notebook-merge .cm-line .cm-merge-r-inserted { - background-color: var(--jp-git-diff-deleted-color); -} - -.jp-git-diff-root - .jp-Notebook-merge - .cm-merge-pane-base - .cm-line - .cm-merge-m-deleted, -.jp-git-diff-root - .jp-Notebook-merge - .cm-merge-pane-base - .cm-line - .cm-merge-l-deleted, -.jp-git-diff-root - .jp-Notebook-merge - .cm-merge-pane-base - .cm-line - .cm-merge-r-deleted { - background-color: var(--jp-git-diff-deleted-color); - color: var(--jp-mirror-editor-string-color); -} - -.jp-git-diff-root - .jp-Notebook-merge - .cm-merge-pane-base - .cm-line - .cm-merge-m-added, -.jp-git-diff-root - .jp-Notebook-merge - .cm-merge-pane-base - .cm-line - .cm-merge-l-added, -.jp-git-diff-root - .jp-Notebook-merge - .cm-merge-pane-base - .cm-line - .cm-merge-r-added { - background-color: var(--jp-git-diff-added-color); - color: var(--jp-mirror-editor-string-color); -} - -/* Hide drag handles */ -.jp-git-diff-root .jp-Notebook-merge .jp-DragPanel-dragHandle { - display: none; -} - -.jp-git-diff-parent-widget .jp-Merge-notebook-controls { - margin-bottom: 0; - padding: 0; - background-color: transparent; - border: none; -} - -/* Hiding unchanged cells if told to */ -.jp-git-diff-root - .nbdime-root.jp-mod-hideUnchanged - .jp-Cell-merge.jp-Merge-unchanged { - display: none; -} - -/* Show a marker with the number of cells hidden before */ -.jp-git-diff-root - .nbdime-root.jp-mod-hideUnchanged - .jp-Cell-merge[data-nbdime-NCellsHiddenBefore]::before { - content: attr(data-nbdime-NCellsHiddenBefore) ' unchanged cell(s) hidden'; - position: absolute; - width: 100%; - top: 0; - background-color: #eee; - border-top: solid #ccc 1px; - border-bottom: solid #ccc 1px; - text-align: center; -} - -/* Show a marker with the number of cells hidden after (for hidden cells at end) */ -.jp-git-diff-root - .nbdime-root.jp-mod-hideUnchanged - .jp-Cell-merge[data-nbdime-NCellsHiddenAfter]::after { - content: attr(data-nbdime-NCellsHiddenAfter) ' unchanged cell(s) hidden'; - position: absolute; - width: 100%; - bottom: 0; - background-color: #eee; - border-top: solid #ccc 1px; - border-bottom: solid #ccc 1px; - text-align: center; -} - -.jp-git-diff-root - .nbdime-root.jp-mod-hideUnchanged - .jp-Cell-merge[data-nbdime-NCellsHiddenBefore] { - padding-top: 40px; -} - -.jp-git-diff-root - .nbdime-root.jp-mod-hideUnchanged - .jp-Cell-merge[data-nbdime-NCellsHiddenAfter] { - padding-bottom: 40px; -} - -/* Marker for when all cells are unchanged and hidden */ -.jp-git-diff-root - .nbdime-root.jp-mod-hideUnchanged - .jp-Notebook-merge[data-nbdime-AllCellsHidden]::after { - content: 'No changes, ' attr(data-nbdime-AllCellsHidden) - ' unchanged cell(s) hidden'; - display: block; - width: 100%; - background-color: #eee; - border-top: solid #ccc 1px; - border-bottom: solid #ccc 1px; - text-align: center; -} diff --git a/style/diff-text.css b/style/diff-text.css deleted file mode 100644 index b91d12831..000000000 --- a/style/diff-text.css +++ /dev/null @@ -1,132 +0,0 @@ -.jp-git-PlainText-diff { - width: 100%; - max-height: calc(100% - 23px); - overflow-y: auto; -} - -/* .jp-git-PlainText-diff .cm-merge, -.jp-git-PlainText-diff .cm-merge .cm, -.jp-git-PlainText-diff .cm-merge .cm-merge-pane { - height: 100%; -} - -.jp-git-PlainText-diff .cm-merge-gap { - z-index: 2; - display: inline-block; - height: 100%; - -moz-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - border-left: var(--codemirror-border); - border-right: var(--codemirror-border); - position: relative; - color: var(--jp-ui-font-color2); - background: var(--jp-layout-color2); -} */ - -.jp-git-PlainText-diff .cm-merge-r-chunk { - background-color: var(--jp-diff-deleted-color2); -} - -.jp-git-PlainText-diff .cm-merge-r-chunk-start { - border-top: 1px solid var(--jp-diff-deleted-color0); -} - -.jp-git-PlainText-diff .cm-merge-r-chunk-end { - border-bottom: 1px solid var(--jp-diff-deleted-color0); -} - -.jp-git-PlainText-diff .cm-merge-r-connect { - fill: var(--jp-diff-deleted-color2); - stroke: var(--jp-diff-deleted-color0); - stroke-width: 1px; -} - -.jp-git-PlainText-diff .cm-merge-spacer { - background-color: var(--jp-diff-deleted-color2); -} - -.jp-git-PlainText-diff .cm-line .cm-merge-r-inserted { - background-color: var(--jp-diff-added-color0); -} - -.jp-git-PlainText-diff .cm-diff-right-editor .cm-merge-r-chunk { - background-color: var(--jp-diff-added-color2); -} - -.jp-git-PlainText-diff .cm-diff-right-editor .cm-merge-r-chunk-start { - border-top: 1px solid var(--jp-diff-added-color0); -} - -.jp-git-PlainText-diff .cm-diff-right-editor .cm-merge-r-chunk-end { - border-bottom: 1px solid var(--jp-diff-added-color0); -} - -.jp-git-PlainText-diff .cm-diff-right-editor .cm-merge-r-connect { - fill: var(--jp-diff-added-color2); - stroke: var(--jp-diff-added-color0); - stroke-width: 1px; -} - -.jp-git-PlainText-diff .cm-diff-right-editor .cm-merge-spacer { - background-color: var(--jp-diff-added-color2); -} - -.cm-patchgutter { - width: 0.7em; -} - -.cm-patchgutter-insert::before { - content: '+'; - color: #999; - background-color: var(--jp-git-diff-added-color); -} - -.cm-patchgutter-delete::before { - content: '-'; - color: #999; - background-color: var(--jp-git-diff-deleted-color); -} - -/* Styles for horizontal scroll lock */ -.jp-git-PlainText-diff .cm-merge-scrolllock { - color: var(--jp-inverse-layout-color2); -} - -.jp-git-PlainText-diff .cm-merge-scrolllock::after { - content: '\21db\00a0\00a0\21da'; -} - -.jp-git-PlainText-diff .cm-merge-scrolllock.cm-merge-scrolllock-enabled::after { - content: '\21db\21da'; -} - -/* Styles for revert buttons handling */ - -.jp-git-PlainText-diff .cm-merge-copybuttons-left, -.jp-git-PlainText-diff .cm-merge-copybuttons-right { - position: absolute; - inset: 0; - line-height: 1; -} - -.jp-git-PlainText-diff .cm-merge-copy { - position: absolute; - cursor: pointer; - color: var(--jp-brand-color1); - z-index: 3; -} - -.jp-git-PlainText-diff .cm-merge-copy-reverse { - position: absolute; - cursor: pointer; - color: var(--jp-brand-color1); -} - -.jp-git-PlainText-diff .cm-merge-copybuttons-left .cm-merge-copy { - left: 2px; -} - -.jp-git-PlainText-diff .cm-merge-copybuttons-right .cm-merge-copy { - right: 2px; -} diff --git a/style/variables.css b/style/variables.css index ff5e91f3a..b941bb77f 100644 --- a/style/variables.css +++ b/style/variables.css @@ -10,4 +10,7 @@ --jp-git-diff-deleted-color1: rgb(255 0 0 / 40%); --jp-git-diff-output-border-color: rgb(0 141 255 / 70%); --jp-git-diff-output-color: rgb(0 141 255 / 30%); + + --jp-merge-local-color: rgb(31 31 224 / 20%); + --jp-merge-local-color1: rgb(31 31 224 / 40%); } diff --git a/yarn.lock b/yarn.lock index 4499c964d..2bb49aa22 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2665,8 +2665,8 @@ __metadata: jest-fetch-mock: ^3.0.0 lint-staged: ^13.2.3 mkdirp: ^1.0.3 - nbdime: ^7.0.0-alpha.0 - nbdime-jupyterlab: ^3.0.0-alpha.0 + nbdime: ^7.0.0-alpha.2 + nbdime-jupyterlab: ^3.0.0-alpha.2 npm-run-all: ^4.1.5 prettier: ^3.0.0 react: ^18.2.0 @@ -9240,9 +9240,9 @@ __metadata: languageName: node linkType: hard -"nbdime-jupyterlab@npm:^3.0.0-alpha.0": - version: 3.0.0-alpha.0 - resolution: "nbdime-jupyterlab@npm:3.0.0-alpha.0" +"nbdime-jupyterlab@npm:^3.0.0-alpha.2": + version: 3.0.0-alpha.2 + resolution: "nbdime-jupyterlab@npm:3.0.0-alpha.2" dependencies: "@jupyterlab/apputils": ^4.0.0 "@jupyterlab/codeeditor": ^4.0.0 @@ -9256,14 +9256,14 @@ __metadata: "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/widgets": ^2.3.0 - nbdime: ^7.0.0-alpha.0 - checksum: 70c14dfcb92bc7a12c022d31e3a8fb968115dc0f75eb2a92f5a4a0d128ab32d9e4daad88f790f00a22df6b6b6f011871fd45a845414472d493e13722d6dbb421 + nbdime: ^7.0.0-alpha.2 + checksum: ab4ff90c517d282da47590f7951eb08a69492a7e847d763574a73ba5b3a11989ef62e7e4af5bd306bc9d44291ca48eec73c3dd826dcd8f416a96591f76daea0c languageName: node linkType: hard -"nbdime@npm:^7.0.0-alpha.0": - version: 7.0.0-alpha.0 - resolution: "nbdime@npm:7.0.0-alpha.0" +"nbdime@npm:^7.0.0-alpha.2": + version: 7.0.0-alpha.2 + resolution: "nbdime@npm:7.0.0-alpha.2" dependencies: "@codemirror/lang-markdown": ^6.1.1 "@codemirror/language": ^6.6.0 @@ -9284,7 +9284,7 @@ __metadata: "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.0 json-stable-stringify: ^1.0.1 - checksum: b6769fc8251c83d2bd8f377c8544676515efa9f7f219de84fa5d2af7eefc96f018b8478c2a82441761caf0b45f414865a76be9b6ec2c43690317dc75b524e96a + checksum: 32c1d3d5504146c53ec4977eb73338c33e8231c31b51c42d650a68bb06a25ee1b8bf5c4dd7cd45c086fbc1fbb3f333fb2f47a5ad7214161f333b34056ad06605 languageName: node linkType: hard From 638ecb1ab533c5e76b4654d35327f734ed11631b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Tue, 17 Oct 2023 14:23:44 +0200 Subject: [PATCH 18/24] Drop test against 3.7 --- .github/workflows/build.yml | 2 +- pyproject.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cc7b23cd8..36a7fead1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.7', '3.8', '3.9', '3.10'] + python-version: ['3.8', '3.9', '3.10'] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/pyproject.toml b/pyproject.toml index aeaa670d7..0fd5b2f68 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,6 +20,7 @@ classifiers = [ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", ] dependencies = [ "jupyter_server>=2.0.1,<3", From 2ddbf65902e44a23cc212e32c4eb5863d91d095c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Wed, 18 Oct 2023 16:28:30 +0200 Subject: [PATCH 19/24] Fix tests --- jest.config.js | 3 + jupyterlab_git/tests/test_handlers.py | 1 + package.json | 10 +- src/__tests__/commands.spec.tsx | 16 +- src/__tests__/model.spec.tsx | 25 +- src/__tests__/plugin.spec.ts | 16 +- .../test-components/BranchMenu.spec.tsx | 190 ++-- .../test-components/CommitBox.spec.tsx | 71 +- .../test-components/CommitMessage.spec.tsx | 41 +- .../test-components/FileItem.spec.tsx | 15 +- .../test-components/GitPanel.spec.tsx | 167 ++-- .../test-components/HistorySideBar.spec.tsx | 86 +- .../ManageRemoteDialogue.spec.tsx | 115 +-- .../test-components/NotebookDiff.spec.tsx | 15 +- .../test-components/PastCommitNode.spec.tsx | 48 +- .../test-components/PlainTextDiff.spec.tsx | 23 +- .../test-components/TagMenu.spec.tsx | 135 +-- .../test-components/Toolbar.spec.tsx | 232 ++--- src/__tests__/utils.ts | 57 +- src/commandsAndMenu.tsx | 26 +- src/components/BranchMenu.tsx | 1 + src/components/FileItem.tsx | 45 +- src/components/GitCommitGraph.tsx | 6 +- src/components/Toolbar.tsx | 2 - src/components/diff/PlainTextDiff.ts | 13 +- src/model.ts | 10 +- src/style/Toolbar.ts | 2 +- style/diff-common.css | 26 +- style/variables.css | 1 - testutils/jest-file-mock.js | 1 - testutils/jest-setup-files.js | 97 +- yarn.lock | 941 ++++++++---------- 32 files changed, 1159 insertions(+), 1278 deletions(-) delete mode 100644 testutils/jest-file-mock.js diff --git a/jest.config.js b/jest.config.js index cb0c20a71..27c4f089a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,6 +6,7 @@ const esModules = [ '@jupyterlab/', 'lib0', 'nanoid', + 'nbdime', 'vscode-ws-jsonrpc', 'y-protocols', 'y-websocket', @@ -30,6 +31,8 @@ module.exports = { '/jupyter-config', '/ui-tests' ], + reporters: ['default', 'github-actions'], + setupFiles: ['/testutils/jest-setup-files.js'], testRegex: 'src/.*/.*.spec.ts[x]?$', transformIgnorePatterns: [`/node_modules/(?!${esModules}).+`] }; diff --git a/jupyterlab_git/tests/test_handlers.py b/jupyterlab_git/tests/test_handlers.py index 350250109..07b7d80ac 100644 --- a/jupyterlab_git/tests/test_handlers.py +++ b/jupyterlab_git/tests/test_handlers.py @@ -51,6 +51,7 @@ async def test_all_history_handler_localbranch(mock_git, jp_fetch, jp_root_dir): mock_git.status.return_value = maybe_future(status) # When + body = {"history_count": 25} response = await jp_fetch( NAMESPACE, local_path.name, "all_history", body=json.dumps(body), method="POST" ) diff --git a/package.json b/package.json index d295a5282..1538c77cb 100644 --- a/package.json +++ b/package.json @@ -102,8 +102,10 @@ "@babel/preset-env": "^7.0.0", "@jupyterlab/builder": "^4.0.0", "@jupyterlab/testutils": "^4.0.0", + "@testing-library/jest-dom": "^6.1.4", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.5.1", "@types/diff-match-patch": "^1.0.32", - "@types/enzyme": "^3.1.15", "@types/jest": "^29.2.0", "@types/json-schema": "^7.0.11", "@types/react": "^18.0.26", @@ -114,10 +116,8 @@ "@types/resize-observer-browser": "^0.1.7", "@typescript-eslint/eslint-plugin": "^6.1.0", "@typescript-eslint/parser": "^6.1.0", - "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", "all-contributors-cli": "^6.14.0", "css-loader": "^6.7.1", - "enzyme": "^3.7.0", "eslint": "^8.36.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", @@ -126,11 +126,11 @@ "husky": "^8.0.3", "identity-obj-proxy": "^3.0.0", "jest": "^29.2.0", - "jest-fetch-mock": "^3.0.0", "lint-staged": "^13.2.3", "mkdirp": "^1.0.3", "npm-run-all": "^4.1.5", "prettier": "^3.0.0", + "resize-observer-polyfill": "^1.5.1", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", "style-loader": "^3.3.1", @@ -139,7 +139,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "ts-jest": "^26.0.0", + "ts-jest": "^29.1.0", "typescript": "~5.0.2", "yjs": "^13.5.40" }, diff --git a/src/__tests__/commands.spec.tsx b/src/__tests__/commands.spec.tsx index 4620fb7a7..ccbf4cf26 100644 --- a/src/__tests__/commands.spec.tsx +++ b/src/__tests__/commands.spec.tsx @@ -14,6 +14,10 @@ import { IMockedResponse, mockedRequestAPI } from './utils'; +import { + CodeMirrorEditorFactory, + EditorLanguageRegistry +} from '@jupyterlab/codemirror'; jest.mock('../git'); jest.mock('@jupyterlab/apputils'); @@ -43,7 +47,7 @@ describe('git-commands', () => { }; mockGit.requestAPI.mockImplementation( - mockedRequestAPI({ responses: mockResponses }) + mockedRequestAPI({ responses: mockResponses }) as any ); commands = new CommandRegistry(); @@ -56,8 +60,10 @@ describe('git-commands', () => { addCommands( app as JupyterFrontEnd, model, + new CodeMirrorEditorFactory().newDocumentEditor, + new EditorLanguageRegistry(), mockedFileBrowserModel, - null, + null as any, nullTranslator ); }); @@ -73,6 +79,7 @@ describe('git-commands', () => { button: { accept: true, actions: [], + ariaLabel: '', caption: '', className: '', displayType: 'default', @@ -86,7 +93,7 @@ describe('git-commands', () => { const spyReset = jest.spyOn(model, 'reset'); spyReset.mockResolvedValueOnce(undefined); const spyCheckout = jest.spyOn(model, 'checkout'); - spyCheckout.mockResolvedValueOnce(undefined); + spyCheckout.mockResolvedValueOnce({} as any); const path = 'file/path.ext'; model.pathRepository = DEFAULT_REPOSITORY_PATH; @@ -140,6 +147,7 @@ describe('git-commands', () => { button: { accept: true, actions: [], + ariaLabel: '', caption: '', className: '', displayType: 'default', @@ -169,7 +177,7 @@ describe('git-commands', () => { } } } - }) + }) as any ); const path = DEFAULT_REPOSITORY_PATH; diff --git a/src/__tests__/model.spec.tsx b/src/__tests__/model.spec.tsx index 608e0896a..1174e4b5a 100644 --- a/src/__tests__/model.spec.tsx +++ b/src/__tests__/model.spec.tsx @@ -7,7 +7,8 @@ import { defaultMockedResponses, DEFAULT_REPOSITORY_PATH, IMockedResponses, - mockedRequestAPI + mockedRequestAPI, + IMockedResponse } from './utils'; jest.mock('../git'); @@ -16,7 +17,9 @@ describe('IGitExtension', () => { const mockGit = git as jest.Mocked; let model: IGitExtension; const docmanager = jest.mock('@jupyterlab/docmanager') as any; - let mockResponses: IMockedResponses; + let mockResponses: IMockedResponses & { + responses: { [endpoint: string]: IMockedResponse }; + }; beforeEach(async () => { jest.restoreAllMocks(); @@ -29,7 +32,9 @@ describe('IGitExtension', () => { responses: { ...defaultMockedResponses } }; - mockGit.requestAPI.mockImplementation(mockedRequestAPI(mockResponses)); + mockGit.requestAPI.mockImplementation( + mockedRequestAPI(mockResponses) as any + ); model = new GitExtension(docmanager as any, docregistry as any); }); @@ -94,7 +99,7 @@ describe('IGitExtension', () => { }); it('should emit repositoryChanged signal and request a refresh', async () => { - let path = DEFAULT_REPOSITORY_PATH; + let path: string | null = DEFAULT_REPOSITORY_PATH; const testPathSignal = testEmission(model.repositoryChanged, { test: (model, change) => { @@ -198,7 +203,7 @@ describe('IGitExtension', () => { describe('#status', () => { it('should be clear if not in a git repository', async () => { let status: Partial = { - branch: null, + branch: undefined, remote: null, ahead: 0, behind: 0, @@ -254,9 +259,9 @@ describe('IGitExtension', () => { const testSignal = testEmission(model.statusChanged, { test: (model, receivedStatus) => { expect(receivedStatus.branch).toEqual(branch); - expect(receivedStatus.files).toHaveLength(status.files.length); + expect(receivedStatus.files).toHaveLength(status.files?.length ?? 0); expect(receivedStatus.files[0]).toMatchObject({ - ...status.files[0] + ...status.files![0] }); } }); @@ -280,7 +285,7 @@ describe('IGitExtension', () => { ['other_repo/file', null, 'repo'], ['root/other_repo/file', null, 'root/repo'] ])( - '%s should return unmodified status with path relative to the repository', + '%s should return unmodified status with path %s to the repository %s', async (path, expected, repo) => { // Given mockResponses.path = repo; @@ -292,8 +297,8 @@ describe('IGitExtension', () => { if (expected === null) { expect(status).toBeNull(); } else { - expect(status.status).toEqual('unmodified'); - expect(status.to).toEqual(expected); + expect(status!.status).toEqual('unmodified'); + expect(status!.to).toEqual(expected); } } ); diff --git a/src/__tests__/plugin.spec.ts b/src/__tests__/plugin.spec.ts index 6718b3551..6be159a9d 100644 --- a/src/__tests__/plugin.spec.ts +++ b/src/__tests__/plugin.spec.ts @@ -36,21 +36,23 @@ describe('plugin', () => { } } as unknown as jest.Mocked; settingRegistry = new SettingRegistry({ - connector: null - }) as jest.Mocked; + connector: null as any + }) as any; }); beforeEach(() => { jest.resetAllMocks(); mockResponses = { responses: { ...defaultMockedResponses } }; - mockGit.requestAPI.mockImplementation(mockedRequestAPI(mockResponses)); + mockGit.requestAPI.mockImplementation( + mockedRequestAPI(mockResponses) as any + ); }); describe('#activate', () => { it('should fail if no git is installed', async () => { // Given const endpoint = 'settings' + URLExt.objectToQueryString({ version }); - mockResponses.responses[endpoint] = { + mockResponses.responses![endpoint] = { body: request => { return { gitVersion: null, @@ -85,7 +87,7 @@ describe('plugin', () => { it('should fail if git version is < 2', async () => { // Given const endpoint = 'settings' + URLExt.objectToQueryString({ version }); - mockResponses.responses[endpoint] = { + mockResponses.responses![endpoint] = { body: request => { return { gitVersion: '1.8.7', @@ -119,7 +121,7 @@ describe('plugin', () => { it('should fail if server and extension version do not match', async () => { // Given const endpoint = 'settings' + URLExt.objectToQueryString({ version }); - mockResponses.responses[endpoint] = { + mockResponses.responses![endpoint] = { body: request => { return { gitVersion: '2.22.0', @@ -156,7 +158,7 @@ describe('plugin', () => { it('should fail if the server extension is not installed', async () => { // Given const endpoint = 'settings' + URLExt.objectToQueryString({ version }); - mockResponses.responses[endpoint] = { + mockResponses.responses![endpoint] = { status: 404 }; const mockedErrorMessage = showErrorMessage as jest.MockedFunction< diff --git a/src/__tests__/test-components/BranchMenu.spec.tsx b/src/__tests__/test-components/BranchMenu.spec.tsx index 9953b107b..f911f827c 100644 --- a/src/__tests__/test-components/BranchMenu.spec.tsx +++ b/src/__tests__/test-components/BranchMenu.spec.tsx @@ -1,19 +1,18 @@ -import { mount, render, shallow } from 'enzyme'; import { showDialog } from '@jupyterlab/apputils'; +import { nullTranslator } from '@jupyterlab/translation'; +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import 'jest'; import * as React from 'react'; -import { ActionButton } from '../../components/ActionButton'; import { BranchMenu, IBranchMenuProps } from '../../components/BranchMenu'; import * as git from '../../git'; import { GitExtension } from '../../model'; -import { listItemClass, nameClass } from '../../style/BranchMenu'; import { - mockedRequestAPI, + DEFAULT_REPOSITORY_PATH, defaultMockedResponses, - DEFAULT_REPOSITORY_PATH + mockedRequestAPI } from '../utils'; -import ClearIcon from '@mui/icons-material/Clear'; -import { nullTranslator } from '@jupyterlab/translation'; jest.mock('../../git'); jest.mock('@jupyterlab/apputils'); @@ -86,7 +85,7 @@ describe('BranchMenu', () => { } } } - }) + }) as any ); model = await createModel(); @@ -107,76 +106,61 @@ describe('BranchMenu', () => { } describe('constructor', () => { - it('should return a new instance', () => { - const menu = shallow(); - expect(menu.instance()).toBeInstanceOf(BranchMenu); - }); - it('should set the default menu filter to an empty string', () => { - const menu = shallow(); - expect(menu.state('filter')).toEqual(''); - }); - - it('should set the default flag indicating whether to show a dialog to create a new branch to `false`', () => { - const menu = shallow(); - expect(menu.state('branchDialog')).toEqual(false); + render(); + expect( + screen.getByRole('textbox', { name: 'Filter branch menu' }) + ).toHaveValue(''); }); }); describe('render', () => { it('should display placeholder text for the menu filter', () => { - const component = shallow(); - const node = component.find('input[type="text"]').first(); - expect(node.prop('placeholder')).toEqual('Filter'); + render(); + expect( + screen.getByRole('textbox', { name: 'Filter branch menu' }) + ).toHaveAttribute('placeholder', 'Filter'); }); it('should set a `title` attribute on the input element to filter a branch menu', () => { - const component = shallow(); - const node = component.find('input[type="text"]').first(); - expect(node.prop('title').length > 0).toEqual(true); - }); - - it('should display a button to clear the menu filter once a filter is provided', () => { - const component = shallow(); - component.setState({ - filter: 'foo' - }); - const nodes = component.find(ClearIcon); - expect(nodes.length).toEqual(1); + render(); + expect(screen.getByRole('textbox')).toHaveAttribute( + 'title', + 'Filter branch menu' + ); }); - it('should set a `title` on the button to clear the menu filter', () => { - const component = shallow(); - component.setState({ - filter: 'foo' - }); - const html = component.find(ClearIcon).first().html(); - expect(html.includes('')).toEqual(true); + it('should display a button to clear the menu filter once a filter is provided', async () => { + render(<BranchMenu {...createProps()} />); + await userEvent.type(screen.getByRole('textbox'), 'foo'); + expect(screen.getAllByTitle('Clear the current filter').length).toEqual( + 1 + ); }); it('should display a button to create a new branch', () => { - const component = shallow(<BranchMenu {...createProps()} />); - const node = component.find('input[type="button"]').first(); - expect(node.prop('value')).toEqual('New Branch'); + render(<BranchMenu {...createProps()} />); + expect(screen.getByRole('button', { name: 'New Branch' })).toBeDefined(); }); it('should set a `title` attribute on the button to create a new branch', () => { - const component = shallow(<BranchMenu {...createProps()} />); - const node = component.find('input[type="button"]').first(); - expect(node.prop('title').length > 0).toEqual(true); + render(<BranchMenu {...createProps()} />); + expect( + screen.getByRole('button', { name: 'New Branch' }) + ).toHaveAttribute('title', 'Create a new branch'); }); it('should display a list of branches', () => { - const component = render(<BranchMenu {...createProps()} />); - const nodes = component.find(`.${nameClass}`); + render(<BranchMenu {...createProps()} />); const branches = BRANCHES; - expect(nodes.length).toEqual(branches.length); + expect(screen.getAllByRole('listitem').length).toEqual(branches.length); // Should contain the branch names... for (let i = 0; i < branches.length; i++) { - // @ts-expect-error lastChild not always defined - expect(nodes[i].lastChild.data).toEqual(branches[i].name); + expect( + screen.getByText(branches[i].name, { exact: true }) + ).toBeDefined(); } }); @@ -210,7 +194,7 @@ describe('BranchMenu', () => { it(`should${ display ? ' ' : 'not ' }display delete and merge buttons for ${JSON.stringify(branch)}`, () => { - const menu = mount( + render( <BranchMenu {...createProps({ currentBranch: 'current', @@ -219,9 +203,9 @@ describe('BranchMenu', () => { /> ); - const item = menu.find(`.${listItemClass}`); - - expect(item.find(ActionButton).length).toEqual(display ? 2 : 0); + expect( + screen.getByRole('listitem').querySelectorAll('button').length + ).toEqual(display ? 2 : 0); }); }); @@ -246,13 +230,13 @@ describe('BranchMenu', () => { }, isChecked: null, value: undefined - }); + }) as any; }); const spy = jest.spyOn(GitExtension.prototype, 'deleteBranch'); const branchName = 'main'; - const menu = mount( + render( <BranchMenu {...createProps({ currentBranch: 'current', @@ -270,9 +254,9 @@ describe('BranchMenu', () => { /> ); - const item = menu.find(`.${listItemClass}`); - const button = item.find(ActionButton); - button.at(0).simulate('click'); + await userEvent.click( + screen.getByRole('button', { name: 'Delete this branch locally' }) + ); // Need to wait that the dialog is resolve so 'deleteBranch' is called before // this test ends. @@ -287,7 +271,7 @@ describe('BranchMenu', () => { const branchName = 'main'; const fakeExecutioner = jest.fn(); - const menu = mount( + render( <BranchMenu {...createProps({ currentBranch: 'current', @@ -308,9 +292,11 @@ describe('BranchMenu', () => { /> ); - const item = menu.find(`.${listItemClass}`); - const button = item.find(ActionButton); - button.at(1).simulate('click'); + await userEvent.click( + screen.getByRole('button', { + name: 'Merge this branch into the current one' + }) + ); expect(fakeExecutioner).toHaveBeenCalledTimes(1); expect(fakeExecutioner).toHaveBeenCalledWith('git:merge', { @@ -318,59 +304,40 @@ describe('BranchMenu', () => { }); }); - it('should set a `title` attribute for each displayed branch', () => { - const component = render(<BranchMenu {...createProps()} />); - const nodes = component.find(`.${listItemClass}`); - - const branches = BRANCHES; - expect(nodes.length).toEqual(branches.length); + it('should show a dialog to create a new branch when the flag indicating whether to show the dialog is `true`', async () => { + render(<BranchMenu {...createProps({ branching: true })} />); - for (let i = 0; i < branches.length; i++) { - // @ts-expect-error attribs not always defined - expect(nodes[i].attribs['title'].length).toBeGreaterThanOrEqual(0); - } - }); + await userEvent.click(screen.getByRole('button', { name: 'New Branch' })); - it('should not, by default, show a dialog to create a new branch', () => { - const component = shallow(<BranchMenu {...createProps()} />); - const node = component.find('NewBranchDialog').first(); - expect(node.prop('open')).toEqual(false); - }); - - it('should show a dialog to create a new branch when the flag indicating whether to show the dialog is `true`', () => { - const component = shallow(<BranchMenu {...createProps()} />); - component.setState({ - branchDialog: true - }); - const node = component.find('NewBranchDialog').first(); - expect(node.prop('open')).toEqual(true); + expect(screen.getByRole('dialog')).toBeDefined(); }); }); describe('switch branch', () => { - it('should not switch to a specified branch upon clicking its corresponding element when branching is disabled', () => { + it('should not switch to a specified branch upon clicking its corresponding element when branching is disabled', async () => { const spy = jest.spyOn(GitExtension.prototype, 'checkout'); - const component = mount(<BranchMenu {...createProps()} />); - const nodes = component.find( - `.${listItemClass}[title*="${BRANCHES[1].name}"]` + render(<BranchMenu {...createProps()} />); + + await userEvent.click( + screen.getByRole('listitem', { + name: `Switch to branch: ${BRANCHES[1].name}` + }) ); - nodes.at(0).simulate('click'); expect(spy).toHaveBeenCalledTimes(0); spy.mockRestore(); }); - it('should switch to a specified branch upon clicking its corresponding element when branching is enabled', () => { + it('should switch to a specified branch upon clicking its corresponding element when branching is enabled', async () => { const spy = jest.spyOn(GitExtension.prototype, 'checkout'); - const component = mount( - <BranchMenu {...createProps({ branching: true })} /> - ); - const nodes = component.find( - `.${listItemClass}[title*="${BRANCHES[1].name}"]` + render(<BranchMenu {...createProps({ branching: true })} />); + await userEvent.click( + screen.getByRole('listitem', { + name: `Switch to branch: ${BRANCHES[1].name}` + }) ); - nodes.at(0).simulate('click'); expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledWith({ @@ -382,30 +349,25 @@ describe('BranchMenu', () => { }); describe('create branch', () => { - it('should not allow creating a new branch when branching is disabled', () => { + it('should not allow creating a new branch when branching is disabled', async () => { const spy = jest.spyOn(GitExtension.prototype, 'checkout'); - const component = shallow(<BranchMenu {...createProps()} />); + render(<BranchMenu {...createProps()} />); - const node = component.find('input[type="button"]').first(); - node.simulate('click'); + await userEvent.click(screen.getByRole('button', { name: 'New Branch' })); - expect(component.state('branchDialog')).toEqual(false); expect(spy).toHaveBeenCalledTimes(0); spy.mockRestore(); }); - it('should display a dialog to create a new branch when branching is enabled and the new branch button is clicked', () => { + it('should display a dialog to create a new branch when branching is enabled and the new branch button is clicked', async () => { const spy = jest.spyOn(GitExtension.prototype, 'checkout'); - const component = shallow( - <BranchMenu {...createProps({ branching: true })} /> - ); + render(<BranchMenu {...createProps({ branching: true })} />); - const node = component.find('input[type="button"]').first(); - node.simulate('click'); + await userEvent.click(screen.getByRole('button', { name: 'New Branch' })); - expect(component.state('branchDialog')).toEqual(true); + expect(screen.getByRole('dialog')).toBeDefined(); expect(spy).toHaveBeenCalledTimes(0); spy.mockRestore(); }); diff --git a/src/__tests__/test-components/CommitBox.spec.tsx b/src/__tests__/test-components/CommitBox.spec.tsx index 26baf7463..1414792c5 100644 --- a/src/__tests__/test-components/CommitBox.spec.tsx +++ b/src/__tests__/test-components/CommitBox.spec.tsx @@ -1,12 +1,11 @@ /* eslint-disable @typescript-eslint/no-empty-function */ import { nullTranslator } from '@jupyterlab/translation'; import { CommandRegistry } from '@lumino/commands'; -import Button from '@mui/material/Button'; -import { shallow } from 'enzyme'; +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; import 'jest'; import * as React from 'react'; import { CommitBox, ICommitBoxProps } from '../../components/CommitBox'; -import { CommitMessage } from '../../components/CommitMessage'; import { WarningBox } from '../../components/WarningBox'; import { CommandIDs } from '../../tokens'; @@ -44,9 +43,10 @@ describe('CommitBox', () => { describe('#render()', () => { it('should display placeholder text for the commit message summary', () => { const props = defaultProps; - const component = shallow(<CommitBox {...props} />); - const node = component.find(CommitMessage); - expect(node.prop('summaryPlaceholder')).toEqual( + render(<CommitBox {...props} />); + + expect(screen.getAllByRole('textbox')[0]).toHaveAttribute( + 'placeholder', 'Summary (Ctrl+Enter to commit)' ); }); @@ -62,33 +62,34 @@ describe('CommitBox', () => { ...defaultProps, commands: adjustedCommands }; - const component = shallow(<CommitBox {...props} />); - const node = component.find(CommitMessage); - expect(node.prop('summaryPlaceholder')).toEqual( + + render(<CommitBox {...props} />); + + expect(screen.getAllByRole('textbox')[0]).toHaveAttribute( + 'placeholder', 'Summary (Shift+Enter to commit)' ); }); it('should display a button to commit changes', () => { const props = defaultProps; - const component = shallow(<CommitBox {...props} />); - const node = component.find(Button).first(); - expect(node.text()).toEqual('Commit'); + render(<CommitBox {...props} />); + + expect(screen.getAllByRole('button')[0]).toHaveTextContent('Commit'); }); it('should set a `title` attribute on the button to commit changes', () => { const props = defaultProps; - const component = shallow(<CommitBox {...props} />); - const node = component.find(Button).first(); - expect(node.prop('title').length > 0).toEqual(true); + render(<CommitBox {...props} />); + + expect(screen.getAllByRole('button')[0]).toHaveAttribute('title'); }); it('should apply a class to disable the commit button when no files have changes to commit', () => { const props = defaultProps; - const component = shallow(<CommitBox {...props} />); - const node = component.find(Button).first(); - const prop = node.prop('disabled'); - expect(prop).toEqual(true); + render(<CommitBox {...props} />); + + expect(screen.getAllByRole('button')[0]).toHaveAttribute('disabled'); }); it('should apply a class to disable the commit button when files have changes to commit, but the user has not entered a commit message summary', () => { @@ -96,10 +97,9 @@ describe('CommitBox', () => { ...defaultProps, hasFiles: true }; - const component = shallow(<CommitBox {...props} />); - const node = component.find(Button).first(); - const prop = node.prop('disabled'); - expect(prop).toEqual(true); + render(<CommitBox {...props} />); + + expect(screen.getAllByRole('button')[0]).toHaveAttribute('disabled'); }); it('should not apply a class to disable the commit button when files have changes to commit and the user has entered a commit message summary', () => { @@ -108,10 +108,10 @@ describe('CommitBox', () => { summary: 'beep boop', hasFiles: true }; - const component = shallow(<CommitBox {...props} />); - const node = component.find(Button).first(); - const prop = node.prop('disabled'); - expect(prop).toEqual(false); + + render(<CommitBox {...props} />); + + expect(screen.getAllByRole('button')[0]).not.toHaveAttribute('disabled'); }); it('should apply a class to disable the commit input fields in amend mode', () => { @@ -120,8 +120,9 @@ describe('CommitBox', () => { summary: 'beep boop', amend: true }; - const component = shallow(<CommitBox {...props} />); - expect(component.find(CommitMessage).length).toEqual(0); + + render(<CommitBox {...props} />); + expect(screen.queryByRole('textbox')).toBeNull(); }); it('should not apply a class to disable the commit button in amend mode', () => { @@ -130,10 +131,9 @@ describe('CommitBox', () => { hasFiles: true, amend: true }; - const component = shallow(<CommitBox {...props} />); - const node = component.find(Button).first(); - const prop = node.prop('disabled'); - expect(prop).toEqual(false); + render(<CommitBox {...props} />); + + expect(screen.getAllByRole('button')[0]).not.toHaveAttribute('disabled'); }); it('should render a warning box when there are dirty staged files', () => { @@ -143,8 +143,9 @@ describe('CommitBox', () => { <WarningBox title="Warning" content="Warning content."></WarningBox> ) }; - const component = shallow(<CommitBox {...props} />); - expect(component.find(WarningBox).length).toEqual(1); + render(<CommitBox {...props} />); + + expect(screen.getByText('Warning content.')).toBeDefined(); }); }); }); diff --git a/src/__tests__/test-components/CommitMessage.spec.tsx b/src/__tests__/test-components/CommitMessage.spec.tsx index d884cac19..71104126a 100644 --- a/src/__tests__/test-components/CommitMessage.spec.tsx +++ b/src/__tests__/test-components/CommitMessage.spec.tsx @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-empty-function */ import { nullTranslator } from '@jupyterlab/translation'; -import Input from '@mui/material/Input'; -import { shallow } from 'enzyme'; +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; import 'jest'; import * as React from 'react'; import { @@ -22,36 +22,43 @@ describe('CommitMessage', () => { it('should set a `title` attribute on the input element to provide a commit message summary', () => { const props = defaultProps; - const component = shallow(<CommitMessage {...props} />); - const node = component.find(Input).first(); - expect(node.prop('title').length > 0).toEqual(true); + render(<CommitMessage {...props} />); + + expect(screen.getAllByRole('textbox')[0].parentElement).toHaveAttribute( + 'title' + ); }); it('should display placeholder text for the commit message description', () => { const props = defaultProps; - const component = shallow(<CommitMessage {...props} />); - const node = component.find(Input).last(); - expect(node.prop('placeholder')).toEqual('Description (optional)'); + render(<CommitMessage {...props} />); + + expect(screen.getAllByRole('textbox')[1]).toHaveAttribute( + 'placeholder', + 'Description (optional)' + ); }); it('should set a `title` attribute on the input element to provide a commit message description', () => { const props = defaultProps; - const component = shallow(<CommitMessage {...props} />); - const node = component.find(Input).last(); - expect(node.prop('title').length > 0).toEqual(true); + render(<CommitMessage {...props} />); + + expect(screen.getAllByRole('textbox')[1].parentElement).toHaveAttribute( + 'title' + ); }); it('should disable summary input if disabled is true', () => { const props = { ...defaultProps, disabled: true }; - const component = shallow(<CommitMessage {...props} />); - const node = component.find(Input).first(); - expect(node.prop('disabled')).toEqual(true); + render(<CommitMessage {...props} />); + + expect(screen.getAllByRole('textbox')[0]).toHaveAttribute('disabled'); }); it('should disable description input if disabled is true', () => { const props = { ...defaultProps, disabled: true }; - const component = shallow(<CommitMessage {...props} />); - const node = component.find(Input).last(); - expect(node.prop('disabled')).toEqual(true); + render(<CommitMessage {...props} />); + + expect(screen.getAllByRole('textbox')[1]).toHaveAttribute('disabled'); }); }); diff --git a/src/__tests__/test-components/FileItem.spec.tsx b/src/__tests__/test-components/FileItem.spec.tsx index f6969a9aa..a3f6a0cb9 100644 --- a/src/__tests__/test-components/FileItem.spec.tsx +++ b/src/__tests__/test-components/FileItem.spec.tsx @@ -1,8 +1,9 @@ -import { FileItem, IFileItemProps } from '../../src/components/FileItem'; -import * as React from 'react'; -import 'jest'; -import { shallow } from 'enzyme'; import { nullTranslator } from '@jupyterlab/translation'; +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; +import 'jest'; +import * as React from 'react'; +import { FileItem, IFileItemProps } from '../../components/FileItem'; describe('FileItem', () => { const trans = nullTranslator.load('jupyterlab_git'); @@ -17,7 +18,7 @@ describe('FileItem', () => { is_binary: null, status: null }, - model: null, + model: null as any, onDoubleClick: () => {}, selected: false, setSelection: file => {}, @@ -26,10 +27,10 @@ describe('FileItem', () => { }; describe('#render()', () => { - const component = shallow(<FileItem {...props} />); it('should display the full path on hover', () => { + render(<FileItem {...props} />); expect( - component.find('[title="some/file/path/file-name • Modified"]') + screen.getAllByTitle('some/file/path/file-name • Modified') ).toHaveLength(1); }); }); diff --git a/src/__tests__/test-components/GitPanel.spec.tsx b/src/__tests__/test-components/GitPanel.spec.tsx index 115060f5e..05dbd1b3c 100644 --- a/src/__tests__/test-components/GitPanel.spec.tsx +++ b/src/__tests__/test-components/GitPanel.spec.tsx @@ -1,10 +1,11 @@ import * as apputils from '@jupyterlab/apputils'; import { nullTranslator } from '@jupyterlab/translation'; import { JSONObject } from '@lumino/coreutils'; -import { shallow } from 'enzyme'; +import '@testing-library/jest-dom'; +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import 'jest'; import React from 'react'; -import { CommitBox } from '../../components/CommitBox'; import { GitPanel, IGitPanelProps } from '../../components/GitPanel'; import * as git from '../../git'; import { GitExtension as GitModel } from '../../model'; @@ -14,6 +15,7 @@ import { IMockedResponse, mockedRequestAPI } from '../utils'; +import { CommandRegistry } from '@lumino/commands'; jest.mock('../../git'); jest.mock('@jupyterlab/apputils'); @@ -56,9 +58,9 @@ describe('GitPanel', () => { const trans = nullTranslator.load('jupyterlab_git'); const props: IGitPanelProps = { - model: null, - commands: null, - settings: null, + model: null as any, + commands: new CommandRegistry(), + settings: null as any, filebrowser: { path: '/dummy/path' } as any, @@ -69,7 +71,9 @@ describe('GitPanel', () => { jest.restoreAllMocks(); const mock = git as jest.Mocked<typeof git>; - mock.requestAPI.mockImplementation(mockedRequestAPI(mockedResponses)); + mock.requestAPI.mockImplementation( + mockedRequestAPI(mockedResponses) as any + ); props.model = new GitModel(); props.model.pathRepository = DEFAULT_REPOSITORY_PATH; @@ -97,7 +101,6 @@ describe('GitPanel', () => { }); describe('#commitFiles()', () => { - let panel: GitPanel; let commitSpy: jest.SpyInstance<Promise<void>>; let configSpy: jest.SpyInstance<Promise<void | JSONObject>>; @@ -119,7 +122,7 @@ describe('GitPanel', () => { iconClass: '', iconLabel: '', label: '' - }, + } as any, isChecked: null, value: { name: commitUser['user.name'], @@ -138,26 +141,59 @@ describe('GitPanel', () => { } }; return Promise.resolve<JSONObject>( - options === undefined + (options === undefined ? response // When getting config options - : null // When setting config options + : null) as any // When setting config options ); }; }; beforeEach(() => { - commitSpy = jest.spyOn(GitModel.prototype, 'commit').mockResolvedValue(); - configSpy = jest.spyOn(GitModel.prototype, 'config'); + configSpy = props.model.config = jest.fn(); + commitSpy = props.model.commit = jest.fn(); + // @ts-expect-error turn off set status + props.model._setStatus = jest.fn(); + + // @ts-expect-error set a private prop + props.model._status = { + branch: 'master', + remote: 'origin/master', + ahead: 0, + behind: 0, + files: [ + { + x: 'M', + y: ' ', + to: 'packages/jupyterlab_toastify/README.md', + from: 'packages/jupyterlab_toastify/README.md', + is_binary: false, + status: 'staged' + } + ], + state: 0 + }; - const panelWrapper = shallow<GitPanel>(<GitPanel {...props} />); - panel = panelWrapper.instance(); + render(<GitPanel {...props} />); }); - it('should commit when commit message is provided', async () => { + it.skip('should commit when commit message is provided', async () => { configSpy.mockResolvedValue({ options: commitUser }); - panel.setState({ commitSummary, commitDescription }); - await panel.commitFiles(); - expect(configSpy).toHaveBeenCalledTimes(1); + + await userEvent.type(screen.getAllByRole('textbox')[0], commitSummary); + await userEvent.type( + screen.getAllByRole('textbox')[1], + commitDescription + ); + + await userEvent.click(screen.getByRole('button', { name: 'Commit' })); + // console.log( + // screen.getByRole('button', { name: 'Commit' }).parentElement!.innerHTML + // ); + + await waitFor(() => { + expect(configSpy).toHaveBeenCalledTimes(1); + }); + expect(commitSpy).toHaveBeenCalledTimes(1); expect(commitSpy).toHaveBeenCalledWith( commitSummary + '\n\n' + commitDescription + '\n', @@ -166,28 +202,27 @@ describe('GitPanel', () => { ); // Only erase commit message upon success - expect(panel.state.commitSummary).toEqual(''); - expect(panel.state.commitDescription).toEqual(''); + expect(screen.getAllByRole('textbox')[0]).toHaveValue(''); + expect(screen.getAllByRole('textbox')[1]).toHaveValue(''); }); it('should not commit without a commit message', async () => { - await panel.commitFiles(); + await userEvent.click(screen.getByRole('button', { name: 'Commit' })); expect(configSpy).not.toHaveBeenCalled(); expect(commitSpy).not.toHaveBeenCalled(); }); - it('should prompt for user identity if explicitly configured', async () => { + it.skip('should prompt for user identity if explicitly configured', async () => { configSpy.mockResolvedValue({ options: commitUser }); props.settings = MockSettings(false, true) as any; - const panelWrapper = shallow<GitPanel>(<GitPanel {...props} />); - panel = panelWrapper.instance(); + render(<GitPanel {...props} />); mockUtils.showDialog.mockResolvedValue(dialogValue); - panel.setState({ commitSummary }); + await userEvent.type(screen.getAllByRole('textbox')[0], commitSummary); + await userEvent.click(screen.getByRole('button', { name: 'Commit' })); - await panel.commitFiles(); expect(configSpy).toHaveBeenCalledTimes(1); expect(configSpy.mock.calls[0]).toHaveLength(0); @@ -196,34 +231,39 @@ describe('GitPanel', () => { expect(commitSpy).toHaveBeenCalledWith(commitSummary, false, author); }); - it('should prompt for user identity if user.name is not set', async () => { + it.skip('should prompt for user identity if user.name is not set', async () => { configSpy.mockImplementation(mockConfigImplementation('user.email')); mockUtils.showDialog.mockResolvedValue(dialogValue); - panel.setState({ commitSummary }); + await userEvent.type(screen.getAllByRole('textbox')[0], commitSummary); + await userEvent.click(screen.getByRole('button', { name: 'Commit' })); - await panel.commitFiles(); - expect(configSpy).toHaveBeenCalledTimes(2); + await waitFor(() => { + expect(configSpy).toHaveBeenCalledTimes(2); + }); expect(configSpy.mock.calls[0]).toHaveLength(0); expect(configSpy.mock.calls[1]).toEqual([commitUser]); expect(commitSpy).toHaveBeenCalledTimes(1); expect(commitSpy).toHaveBeenCalledWith(commitSummary, false, null); }); - it('should prompt for user identity if user.email is not set', async () => { + it.skip('should prompt for user identity if user.email is not set', async () => { configSpy.mockImplementation(mockConfigImplementation('user.name')); mockUtils.showDialog.mockResolvedValue(dialogValue); - panel.setState({ commitSummary }); - await panel.commitFiles(); - expect(configSpy).toHaveBeenCalledTimes(2); + await userEvent.type(screen.getAllByRole('textbox')[0], commitSummary); + await userEvent.click(screen.getByRole('button', { name: 'Commit' })); + + await waitFor(() => { + expect(configSpy).toHaveBeenCalledTimes(2); + }); expect(configSpy.mock.calls[0]).toHaveLength(0); expect(configSpy.mock.calls[1]).toEqual([commitUser]); expect(commitSpy).toHaveBeenCalledTimes(1); expect(commitSpy).toHaveBeenCalledWith(commitSummary, false, null); }); - it('should not commit if no user identity is set and the user rejects the dialog', async () => { + it.skip('should not commit if no user identity is set and the user rejects the dialog', async () => { configSpy.mockResolvedValue({ options: {} }); mockUtils.showDialog.mockResolvedValue({ button: { @@ -234,29 +274,25 @@ describe('GitPanel', () => { value: null }); - panel.setState({ commitSummary, commitDescription }); - try { - await panel.commitFiles(); - } catch (error) { - expect(error.message).toEqual( - 'Failed to set your identity. User refused to set identity.' - ); - } - expect(configSpy).toHaveBeenCalledTimes(1); + await userEvent.type(screen.getAllByRole('textbox')[0], commitSummary); + await userEvent.type( + screen.getAllByRole('textbox')[1], + commitDescription + ); + await userEvent.click(screen.getByRole('button', { name: 'Commit' })); + + await waitFor(() => expect(configSpy).toHaveBeenCalledTimes(1)); expect(configSpy).toHaveBeenCalledWith(); expect(commitSpy).not.toHaveBeenCalled(); // Should not erase commit message - expect(panel.state.commitSummary).toEqual(commitSummary); - expect(panel.state.commitDescription).toEqual(commitDescription); + expect(screen.getAllByRole('textbox')[0]).toHaveValue(commitSummary); + expect(screen.getAllByRole('textbox')[1]).toHaveValue(commitDescription); }); }); describe('#render()', () => { beforeEach(() => { - props.commands = { - keyBindings: { find: jest.fn() } - } as any; props.model = { branches: [], status: {}, @@ -289,6 +325,9 @@ describe('GitPanel', () => { }, dirtyFilesStatusChanged: { connect: jest.fn() + }, + remoteChanged: { + connect: jest.fn() } } as any; @@ -306,12 +345,12 @@ describe('GitPanel', () => { upstream: 'origin' } ]; + (props.model as any).pathRepository = '/path'; - const panel = shallow(<GitPanel {...props} />); - panel.setState({ - repository: '/path' - }); - expect(panel.find(CommitBox).prop('label')).toEqual('Commit and Push'); + render(<GitPanel {...props} />); + + const buttons = screen.getAllByRole('button'); + expect(buttons[buttons.length - 2]).toHaveTextContent('Commit and Push'); }); it('should render Commit if there is no remote branch', () => { @@ -325,12 +364,12 @@ describe('GitPanel', () => { upstream: null } ]; + (props.model as any).pathRepository = '/path'; - const panel = shallow(<GitPanel {...props} />); - panel.setState({ - repository: '/path' - }); - expect(panel.find(CommitBox).prop('label')).toEqual('Commit'); + render(<GitPanel {...props} />); + + const buttons = screen.getAllByRole('button'); + expect(buttons[buttons.length - 2]).toHaveTextContent('Commit'); }); it('should render Commit if there is a remote branch but commitAndPush is false', () => { @@ -344,13 +383,13 @@ describe('GitPanel', () => { upstream: 'origin' } ]; + (props.model as any).pathRepository = '/path'; props.settings = MockSettings(false) as any; - const panel = shallow(<GitPanel {...props} />); - panel.setState({ - repository: '/path' - }); - expect(panel.find(CommitBox).prop('label')).toEqual('Commit'); + render(<GitPanel {...props} />); + + const buttons = screen.getAllByRole('button'); + expect(buttons[buttons.length - 2]).toHaveTextContent('Commit'); }); }); }); diff --git a/src/__tests__/test-components/HistorySideBar.spec.tsx b/src/__tests__/test-components/HistorySideBar.spec.tsx index f140f06fa..e6f9dfe1b 100644 --- a/src/__tests__/test-components/HistorySideBar.spec.tsx +++ b/src/__tests__/test-components/HistorySideBar.spec.tsx @@ -1,17 +1,20 @@ +import { DocumentRegistry } from '@jupyterlab/docregistry'; +import { nullTranslator } from '@jupyterlab/translation'; +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; +import 'jest'; import * as React from 'react'; -import { shallow } from 'enzyme'; import { HistorySideBar, IHistorySideBarProps } from '../../components/HistorySideBar'; -import 'jest'; - -import { PastCommitNode } from '../../components/PastCommitNode'; import { GitExtension } from '../../model'; -import { nullTranslator } from '@jupyterlab/translation'; -import { FileItem } from '../../components/FileItem'; -import { DocumentRegistry } from '@jupyterlab/docregistry'; -import { SinglePastCommitInfo } from '../../components/SinglePastCommitInfo'; +import { fileStyle } from '../../style/FileItemStyle'; +import { + commitBodyClass, + commitWrapperClass +} from '../../style/PastCommitNode'; +import { selectedHistoryFileStyle } from '../../style/HistorySideBarStyle'; describe('HistorySideBar', () => { const trans = nullTranslator.load('jupyterlab-git'); @@ -19,11 +22,11 @@ describe('HistorySideBar', () => { const props: IHistorySideBarProps = { commits: [ { - commit: null, - author: null, - date: null, - commit_msg: null, - pre_commits: [null] + commit: '1234567890', + author: null as any, + date: null as any, + commit_msg: null as any, + pre_commits: [null as any] } ], branches: [], @@ -31,12 +34,12 @@ describe('HistorySideBar', () => { model: { selectedHistoryFile: null } as GitExtension, - commands: null, + commands: null as any, trans, referenceCommit: null, challengerCommit: null, - onSelectForCompare: _ => async _ => null, - onCompareWithSelected: _ => async _ => null + onSelectForCompare: (() => async () => null) as any, + onCompareWithSelected: (() => async () => null) as any }; beforeEach(() => { @@ -51,21 +54,34 @@ describe('HistorySideBar', () => { }); it('renders the commit nodes', () => { - const historySideBar = shallow(<HistorySideBar {...props} />); - expect(historySideBar.find(PastCommitNode)).toHaveLength(1); - expect(historySideBar.find(SinglePastCommitInfo)).toHaveLength(1); + render(<HistorySideBar {...props} />); + + const pastCommitNodes = screen + .getAllByRole('listitem') + .filter(el => el.classList.contains(commitWrapperClass)); + expect(pastCommitNodes).toHaveLength(1); + const singlePastCommit = Array.from( + pastCommitNodes[0].querySelectorAll(`.${commitBodyClass}`) + ); + expect(singlePastCommit).toHaveLength(1); // Selected history file element - expect(historySideBar.find(FileItem)).toHaveLength(0); + expect( + Array.from(singlePastCommit[0].querySelectorAll(`.${fileStyle}`)) + ).toHaveLength(0); }); it('shows a message if no commits are found', () => { const propsWithoutCommits: IHistorySideBarProps = { ...props, commits: [] }; - const historySideBar = shallow(<HistorySideBar {...propsWithoutCommits} />); - expect(historySideBar.find(PastCommitNode)).toHaveLength(0); + render(<HistorySideBar {...propsWithoutCommits} />); + + expect( + screen + .getAllByRole('listitem') + .filter(el => el.classList.contains(commitWrapperClass)) + ).toHaveLength(0); - const noHistoryFound = historySideBar.find('li'); - expect(noHistoryFound).toHaveLength(1); - expect(noHistoryFound.text()).toEqual('No history found.'); + expect(screen.getAllByRole('listitem')).toHaveLength(1); + expect(screen.getByRole('listitem')).toHaveTextContent('No history found.'); }); it('correctly shows the selected history file', () => { @@ -84,15 +100,21 @@ describe('HistorySideBar', () => { } as GitExtension }; - const historySideBar = shallow( - <HistorySideBar {...propsWithSelectedFile} /> + render(<HistorySideBar {...propsWithSelectedFile} />); + + const selectedHistoryFile = Array.from( + screen + .getAllByRole('list')[0] + .querySelectorAll(`.${selectedHistoryFileStyle}`) ); - const selectedHistoryFile = historySideBar.find(FileItem); expect(selectedHistoryFile).toHaveLength(1); - expect(selectedHistoryFile.prop('file')).toEqual( - propsWithSelectedFile.model.selectedHistoryFile - ); + expect(selectedHistoryFile[0]).toHaveTextContent('filepath/to'); // Only renders with repository history - expect(historySideBar.find(SinglePastCommitInfo)).toHaveLength(0); + const singlePastCommit = Array.from( + screen + .getAllByRole('listitem')[0] + .querySelectorAll(`.${commitBodyClass}`)[0].children + ); + expect(singlePastCommit).toHaveLength(0); }); }); diff --git a/src/__tests__/test-components/ManageRemoteDialogue.spec.tsx b/src/__tests__/test-components/ManageRemoteDialogue.spec.tsx index 84b446883..06d3e83ff 100644 --- a/src/__tests__/test-components/ManageRemoteDialogue.spec.tsx +++ b/src/__tests__/test-components/ManageRemoteDialogue.spec.tsx @@ -1,22 +1,20 @@ -import { shallow } from 'enzyme'; +import { nullTranslator } from '@jupyterlab/translation'; +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import 'jest'; import * as React from 'react'; -import { ActionButton } from '../../components/ActionButton'; import { - ManageRemoteDialogue, IManageRemoteDialogueProps, - IManageRemoteDialogueState + ManageRemoteDialogue } from '../../components/ManageRemoteDialogue'; import * as git from '../../git'; import { GitExtension } from '../../model'; -import { createButtonClass } from '../../style/NewBranchDialog'; import { - mockedRequestAPI, + DEFAULT_REPOSITORY_PATH, defaultMockedResponses, - DEFAULT_REPOSITORY_PATH + mockedRequestAPI } from '../utils'; -import ClearIcon from '@mui/icons-material/Clear'; -import { nullTranslator } from '@jupyterlab/translation'; jest.mock('../../git'); jest.mock('@jupyterlab/apputils'); @@ -63,7 +61,7 @@ describe('ManageRemoteDialogue', () => { } } } - }) + }) as any ); model = await createModel(); @@ -81,108 +79,69 @@ describe('ManageRemoteDialogue', () => { } describe('constructor', () => { - it('should return a new instance with initial state', () => { - const remoteDialogue = shallow( - <ManageRemoteDialogue {...createProps()} /> - ); - expect(remoteDialogue.instance()).toBeInstanceOf(ManageRemoteDialogue); - const initialState: IManageRemoteDialogueState = { - newRemote: { - name: '', - url: '' - }, - existingRemotes: null - }; - expect(remoteDialogue.state()).toEqual(initialState); - }); - it('should set the correct state after mounting', async () => { const spyGitGetRemotes = jest.spyOn(GitExtension.prototype, 'getRemotes'); const spyComponentDidMount = jest.spyOn( ManageRemoteDialogue.prototype, 'componentDidMount' ); - const remoteDialogue = shallow( - <ManageRemoteDialogue {...createProps()} /> - ); - await remoteDialogue.instance().componentDidMount(); - expect(remoteDialogue.state()).toEqual({ - newRemote: { - name: '', - url: '' - }, - existingRemotes: REMOTES - }); - expect(spyGitGetRemotes).toHaveBeenCalledTimes(2); - expect(spyComponentDidMount).toHaveBeenCalledTimes(2); + render(<ManageRemoteDialogue {...createProps()} />); + expect(spyGitGetRemotes).toHaveBeenCalledTimes(1); + expect(spyComponentDidMount).toHaveBeenCalledTimes(1); }); }); describe('render', () => { it('should display a title for the dialogue "Manage Remotes"', () => { - const remoteDialogue = shallow( - <ManageRemoteDialogue {...createProps()} /> - ); - const node = remoteDialogue.find('p').first(); - expect(node.text()).toEqual('Manage Remotes'); + render(<ManageRemoteDialogue {...createProps()} />); + const node = screen.getByRole('dialog').querySelector('p'); + expect(node?.textContent).toEqual('Manage Remotes'); }); it('should display a button to close the dialogue', () => { - const remoteDialogue = shallow( - <ManageRemoteDialogue {...createProps()} /> - ); - const nodes = remoteDialogue.find(ClearIcon); - expect(nodes.length).toEqual(1); + render(<ManageRemoteDialogue {...createProps()} />); + expect(screen.getAllByTitle('Close this dialog')).toHaveLength(1); }); it('should display two input boxes for entering new remote name and url', () => { - const remoteDialogue = shallow( - <ManageRemoteDialogue {...createProps()} /> - ); - const nameInput = remoteDialogue.find('input[placeholder="name"]'); - const urlInput = remoteDialogue.find( - 'input[placeholder="Remote Git repository URL"]' - ); - expect(nameInput.length).toEqual(1); - expect(urlInput.length).toEqual(1); + render(<ManageRemoteDialogue {...createProps()} />); + const nameInput = screen.getByPlaceholderText('name'); + const urlInput = screen.getByPlaceholderText('Remote Git repository URL'); + expect(nameInput).toBeDefined(); + expect(urlInput).toBeDefined(); }); it('should display a button to add a new remote', () => { - const remoteDialogue = shallow( - <ManageRemoteDialogue {...createProps()} /> - ); - const node = remoteDialogue.find(`.${createButtonClass}`).first(); - expect(node.prop('value')).toEqual('Add'); + render(<ManageRemoteDialogue {...createProps()} />); + + expect(screen.getByRole('button', { name: 'Add' })).toBeDefined(); }); it('should display buttons to remove existing remotes', async () => { - const remoteDialogue = shallow( - <ManageRemoteDialogue {...createProps()} /> - ); - await remoteDialogue.instance().componentDidMount(); - const nodes = remoteDialogue.find(ActionButton); - expect(nodes.length).toEqual(REMOTES.length); + render(<ManageRemoteDialogue {...createProps()} />); + await screen.findByText(REMOTES[0].name); + expect( + screen.getAllByRole('button', { name: 'Remove this remote' }) + ).toHaveLength(REMOTES.length); }); }); describe('functionality', () => { it('should add a new remote', async () => { - const remoteDialogue = shallow( - <ManageRemoteDialogue {...createProps()} /> - ); + render(<ManageRemoteDialogue {...createProps()} />); const newRemote = { name: 'newRemote', url: 'newremote.com' }; - await remoteDialogue.setState({ - newRemote - }); + + await userEvent.type(screen.getByPlaceholderText('name'), newRemote.name); + await userEvent.type( + screen.getByPlaceholderText('Remote Git repository URL'), + newRemote.url + ); const spyGitAddRemote = jest.spyOn(GitExtension.prototype, 'addRemote'); - const addRemoteButton = remoteDialogue - .find(`.${createButtonClass}`) - .first(); - addRemoteButton.simulate('click'); + await userEvent.click(screen.getByRole('button', { name: 'Add' })); expect(spyGitAddRemote).toHaveBeenCalledTimes(1); expect(spyGitAddRemote).toHaveBeenCalledWith( newRemote.url, diff --git a/src/__tests__/test-components/NotebookDiff.spec.tsx b/src/__tests__/test-components/NotebookDiff.spec.tsx index 02f4d4386..98a5a5477 100644 --- a/src/__tests__/test-components/NotebookDiff.spec.tsx +++ b/src/__tests__/test-components/NotebookDiff.spec.tsx @@ -4,6 +4,7 @@ import { NotebookDiff, ROOT_CLASS } from '../../components/diff/NotebookDiff'; import { requestAPI } from '../../git'; import { Git } from '../../tokens'; import * as diffResponse from './data/nbDiffResponse.json'; +import { RenderMimeRegistry } from '@jupyterlab/rendermime'; jest.mock('../../git'); @@ -28,7 +29,7 @@ describe('NotebookDiff', () => { (requestAPI as jest.Mock).mockResolvedValueOnce(diffResponse); // When - const widget = new NotebookDiff(model, null); + const widget = new NotebookDiff(model, new RenderMimeRegistry()); await widget.ready; // Then @@ -36,7 +37,7 @@ describe('NotebookDiff', () => { const terminateTest = new Promise(resolve => { resolveTest = resolve; }); - setImmediate(() => { + setTimeout(() => { expect(requestAPI).toHaveBeenCalled(); expect(requestAPI).toBeCalledWith('diffnotebook', 'POST', { currentContent: 'challenger', @@ -48,7 +49,7 @@ describe('NotebookDiff', () => { expect(widget.node.querySelectorAll(`.${ROOT_CLASS}`)).toHaveLength(1); expect(widget.node.querySelectorAll('.jp-Notebook-diff')).toHaveLength(1); resolveTest(); - }); + }, 1); await terminateTest; }); @@ -77,7 +78,7 @@ describe('NotebookDiff', () => { ); // When - const widget = new NotebookDiff(model, null); + const widget = new NotebookDiff(model, new RenderMimeRegistry()); await widget.ready; // Then @@ -85,17 +86,17 @@ describe('NotebookDiff', () => { const terminateTest = new Promise(resolve => { resolveTest = resolve; }); - setImmediate(() => { + setTimeout(() => { expect(requestAPI).toHaveBeenCalled(); expect(requestAPI).toBeCalledWith('diffnotebook', 'POST', { currentContent: 'challenger', previousContent: 'reference' }); expect( - widget.node.querySelector('.jp-git-diff-error').innerHTML + widget.node.querySelector('.jp-git-diff-error')!.innerHTML ).toContain('TEST_ERROR_MESSAGE'); resolveTest(); - }); + }, 1); await terminateTest; }); }); diff --git a/src/__tests__/test-components/PastCommitNode.spec.tsx b/src/__tests__/test-components/PastCommitNode.spec.tsx index 9956f1fa9..8cdaaa495 100644 --- a/src/__tests__/test-components/PastCommitNode.spec.tsx +++ b/src/__tests__/test-components/PastCommitNode.spec.tsx @@ -1,5 +1,7 @@ import { nullTranslator } from '@jupyterlab/translation'; -import { shallow } from 'enzyme'; +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import 'jest'; import * as React from 'react'; import { @@ -71,7 +73,7 @@ describe('PastCommitNode', () => { const tags: Git.ITag[] = notMatchingTags.concat(matchingTags); const toggleCommitExpansion = jest.fn(); const props: IPastCommitNodeProps = { - model: null, + model: null as any, commit: { commit: '2414721b194453f058079d897d13c4e377f92dc6', author: 'author', @@ -81,47 +83,47 @@ describe('PastCommitNode', () => { }, branches: branches, tagsList: tags, - commands: null, + commands: null as any, trans, - onCompareWithSelected: null, - onSelectForCompare: null, + onCompareWithSelected: null as any, + onSelectForCompare: null as any, expanded: false, toggleCommitExpansion, setRef: () => null }; test('Includes commit info', () => { - const node = shallow(<PastCommitNode {...props} />); - expect(node.text()).toMatch(props.commit.author); - expect(node.text()).toMatch(props.commit.commit.slice(0, 7)); - expect(node.text()).toMatch(props.commit.date); - expect(node.text()).toMatch(props.commit.commit_msg); + render(<PastCommitNode {...props} />); + expect(screen.getByText(props.commit.author)).toBeDefined(); + expect(screen.getByText(props.commit.commit.slice(0, 7))).toBeDefined(); + expect(screen.getByText(props.commit.date)).toBeDefined(); + expect(screen.getByText(props.commit.commit_msg)).toBeDefined(); }); test('Includes only relevant branch info', () => { - const node = shallow(<PastCommitNode {...props} />); - expect(node.text()).toMatch('name3'); - expect(node.text()).toMatch('name4'); - expect(node.text()).not.toMatch('name1'); - expect(node.text()).not.toMatch('name2'); + render(<PastCommitNode {...props} />); + expect(screen.getByText('name3')).toBeDefined(); + expect(screen.getByText('name4')).toBeDefined(); + expect(screen.queryByText('name1')).toBeNull(); + expect(screen.queryByText('name2')).toBeNull(); }); test('Includes only relevant tag info', () => { - const node = shallow(<PastCommitNode {...props} />); - expect(node.text()).toMatch('1.0.0'); - expect(node.text()).toMatch('feature-1'); - expect(node.text()).not.toMatch('feature-2'); - expect(node.text()).not.toMatch('patch-007'); + render(<PastCommitNode {...props} />); + expect(screen.getByText('1.0.0')).toBeDefined(); + expect(screen.getByText('feature-1')).toBeDefined(); + expect(screen.queryByText('feature-2')).toBeNull(); + expect(screen.queryByText('patch-007')).toBeNull(); }); - test('Toggle show details', () => { + test('Toggle show details', async () => { // simulates SinglePastCommitInfo child - const node = shallow( + render( <PastCommitNode {...props}> <div id="singlePastCommitInfo"></div> </PastCommitNode> ); - node.simulate('click'); + await userEvent.click(screen.getByRole('listitem')); expect(toggleCommitExpansion).toBeCalledTimes(1); expect(toggleCommitExpansion).toHaveBeenCalledWith(props.commit.commit); }); diff --git a/src/__tests__/test-components/PlainTextDiff.spec.tsx b/src/__tests__/test-components/PlainTextDiff.spec.tsx index a155c20bb..5d226f04c 100644 --- a/src/__tests__/test-components/PlainTextDiff.spec.tsx +++ b/src/__tests__/test-components/PlainTextDiff.spec.tsx @@ -1,11 +1,9 @@ import 'jest'; -import { mergeView } from '../../components/diff/mergeview'; import { DiffModel } from '../../components/diff/model'; import { PlainTextDiff } from '../../components/diff/PlainTextDiff'; import { Git } from '../../tokens'; jest.mock('../../git'); -jest.mock('../../components/diff/mergeview'); describe('PlainTextDiff', () => { it('should render file diff', async () => { @@ -25,10 +23,8 @@ describe('PlainTextDiff', () => { repositoryPath: 'path' }); - const mockMergeView = mergeView as jest.Mocked<typeof mergeView>; - // When - const widget = new PlainTextDiff(model); + const widget = new PlainTextDiff({ model }); await widget.ready; // Then @@ -36,14 +32,12 @@ describe('PlainTextDiff', () => { const terminateTest = new Promise(resolve => { resolveTest = resolve; }); - setImmediate(() => { + setTimeout(() => { expect(widget.node.querySelectorAll('.jp-git-diff-error')).toHaveLength( 0 ); - // merge view was not called as it happens when the widget got attach - expect(mockMergeView).not.toHaveBeenCalled(); resolveTest(); - }); + }, 0); await terminateTest; }); @@ -64,10 +58,8 @@ describe('PlainTextDiff', () => { repositoryPath: 'path' }); - const mockMergeView = mergeView as jest.Mocked<typeof mergeView>; - // When - const widget = new PlainTextDiff(model); + const widget = new PlainTextDiff({ model }); await widget.ready; // Then @@ -75,13 +67,12 @@ describe('PlainTextDiff', () => { const terminateTest = new Promise(resolve => { resolveTest = resolve; }); - setImmediate(() => { + setTimeout(() => { expect( - widget.node.querySelector('.jp-git-diff-error').innerHTML + widget.node.querySelector('.jp-git-diff-error')!.innerHTML ).toContain('TEST_ERROR_MESSAGE'); - expect(mockMergeView).not.toHaveBeenCalled(); resolveTest(); - }); + }, 0); await terminateTest; }); }); diff --git a/src/__tests__/test-components/TagMenu.spec.tsx b/src/__tests__/test-components/TagMenu.spec.tsx index 596601726..edf220451 100644 --- a/src/__tests__/test-components/TagMenu.spec.tsx +++ b/src/__tests__/test-components/TagMenu.spec.tsx @@ -1,12 +1,12 @@ import { nullTranslator } from '@jupyterlab/translation'; -import ClearIcon from '@mui/icons-material/Clear'; -import { mount, shallow } from 'enzyme'; +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import 'jest'; import * as React from 'react'; import { ITagMenuProps, TagMenu } from '../../components/TagMenu'; import * as git from '../../git'; import { GitExtension } from '../../model'; -import { listItemClass } from '../../style/BranchMenu'; import { IGitExtension } from '../../tokens'; import { DEFAULT_REPOSITORY_PATH, @@ -69,7 +69,7 @@ describe('TagMenu', () => { } } } - }) + }) as any ); model = await createModel(); @@ -87,105 +87,84 @@ describe('TagMenu', () => { } describe('constructor', () => { - it('should return a new instance', () => { - const menu = shallow(<TagMenu {...createProps()} />); - expect(menu.instance()).toBeInstanceOf(TagMenu); - }); - it('should set the default menu filter to an empty string', () => { - const menu = shallow(<TagMenu {...createProps()} />); - expect(menu.state('filter')).toEqual(''); - }); - - it('should set the default flag indicating whether to show a dialog to create a new tag to `false`', () => { - const menu = shallow(<TagMenu {...createProps()} />); - expect(menu.state('tagDialog')).toEqual(false); + render(<TagMenu {...createProps()} />); + expect( + screen.getByRole('textbox', { name: 'Filter tag menu' }) + ).toHaveValue(''); }); }); describe('render', () => { it('should display placeholder text for the menu filter', () => { - const component = shallow(<TagMenu {...createProps()} />); - const node = component.find('input[type="text"]').first(); - expect(node.prop('placeholder')).toEqual('Filter'); + render(<TagMenu {...createProps()} />); + expect( + screen.getByRole('textbox', { name: 'Filter tag menu' }) + ).toHaveAttribute('placeholder', 'Filter'); }); it('should set a `title` attribute on the input element to filter a tag menu', () => { - const component = shallow(<TagMenu {...createProps()} />); - const node = component.find('input[type="text"]').first(); - expect(node.prop('title').length > 0).toEqual(true); - }); - - it('should display a button to clear the menu filter once a filter is provided', () => { - const component = shallow(<TagMenu {...createProps()} />); - component.setState({ - filter: 'foo' - }); - const nodes = component.find(ClearIcon); - expect(nodes.length).toEqual(1); + render(<TagMenu {...createProps()} />); + expect(screen.getByRole('textbox')).toHaveAttribute( + 'title', + 'Filter tag menu' + ); }); - it('should set a `title` on the button to clear the menu filter', () => { - const component = shallow(<TagMenu {...createProps()} />); - component.setState({ - filter: 'foo' - }); - const html = component.find(ClearIcon).first().html(); - expect(html.includes('<title>')).toEqual(true); + it('should display a button to clear the menu filter once a filter is provided', async () => { + render(<TagMenu {...createProps()} />); + await userEvent.type(screen.getByRole('textbox'), 'foo'); + expect(screen.getAllByTitle('Clear the current filter').length).toEqual( + 1 + ); }); it('should display a button to create a new tag', () => { - const component = shallow(<TagMenu {...createProps()} />); - const node = component.find('input[type="button"]').first(); - expect(node.prop('value')).toEqual('New Tag'); + render(<TagMenu {...createProps()} />); + expect(screen.getByRole('button', { name: 'New Tag' })).toBeDefined(); }); it('should set a `title` attribute on the button to create a new tag', () => { - const component = shallow(<TagMenu {...createProps()} />); - const node = component.find('input[type="button"]').first(); - expect(node.prop('title').length > 0).toEqual(true); + render(<TagMenu {...createProps()} />); + expect(screen.getByRole('button', { name: 'New Tag' })).toHaveAttribute( + 'title', + 'Create a new tag' + ); }); it('should not, by default, show a dialog to create a new tag', () => { - const component = shallow(<TagMenu {...createProps()} />); - const node = component.find('NewTagDialogBox').first(); - expect(node.prop('open')).toEqual(false); + render(<TagMenu {...createProps()} />); + + expect(screen.queryByRole('dialog')).toBeNull(); }); - it('should show a dialog to create a new tag when the flag indicating whether to show the dialog is `true`', () => { - const component = shallow(<TagMenu {...createProps()} />); - component.setState({ - tagDialog: true - }); - const node = component.find('NewTagDialogBox').first(); - expect(node.prop('open')).toEqual(true); + it('should show a dialog to create a new tag when the flag indicating whether to show the dialog is `true`', async () => { + render(<TagMenu {...createProps({ branching: true })} />); + + await userEvent.click(screen.getByRole('button', { name: 'New Tag' })); + + expect(screen.getByRole('dialog')).toBeDefined(); }); }); describe('switch tag', () => { - it('should not switch to a specified tag upon clicking its corresponding element when branching is disabled', () => { + it('should not switch to a specified tag upon clicking its corresponding element when branching is disabled', async () => { const spy = jest.spyOn(GitExtension.prototype, 'checkoutTag'); - const component = mount(<TagMenu {...createProps()} />); - const nodes = component.find( - `.${listItemClass}[title*="${TAGS[1].name}"]` - ); - nodes.at(0).simulate('click'); + render(<TagMenu {...createProps()} />); + + await userEvent.click(screen.getByTitle(new RegExp(TAGS[1].name))); expect(spy).toHaveBeenCalledTimes(0); spy.mockRestore(); }); - it('should switch to a specified tag upon clicking its corresponding element when branching is enabled', () => { + it('should switch to a specified tag upon clicking its corresponding element when branching is enabled', async () => { const spy = jest.spyOn(GitExtension.prototype, 'checkoutTag'); - const component = mount( - <TagMenu {...createProps({ branching: true })} /> - ); - const nodes = component.find( - `.${listItemClass}[title*="${TAGS[1].name}"]` - ); - nodes.at(0).simulate('click'); + render(<TagMenu {...createProps({ branching: true })} />); + + await userEvent.click(screen.getByTitle(new RegExp(TAGS[1].name))); expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledWith(TAGS[1].name); @@ -195,30 +174,26 @@ describe('TagMenu', () => { }); describe('create tag', () => { - it('should not allow creating a new tag when branching is disabled', () => { + it('should not allow creating a new tag when branching is disabled', async () => { const spy = jest.spyOn(GitExtension.prototype, 'setTag'); - const component = shallow(<TagMenu {...createProps()} />); + render(<TagMenu {...createProps()} />); - const node = component.find('input[type="button"]').first(); - node.simulate('click'); + await userEvent.click(screen.getByRole('button', { name: 'New Tag' })); - expect(component.state('tagDialog')).toEqual(false); + expect(screen.queryByRole('dialog')).toBeNull(); expect(spy).toHaveBeenCalledTimes(0); spy.mockRestore(); }); - it('should display a dialog to create a new tag when branching is enabled and the new tag button is clicked', () => { + it('should display a dialog to create a new tag when branching is enabled and the new tag button is clicked', async () => { const spy = jest.spyOn(GitExtension.prototype, 'setTag'); - const component = shallow( - <TagMenu {...createProps({ branching: true })} /> - ); + render(<TagMenu {...createProps({ branching: true })} />); - const node = component.find('input[type="button"]').first(); - node.simulate('click'); + await userEvent.click(screen.getByRole('button', { name: 'New Tag' })); - expect(component.state('tagDialog')).toEqual(true); + expect(screen.getByRole('dialog')).toBeDefined(); expect(spy).toHaveBeenCalledTimes(0); spy.mockRestore(); }); diff --git a/src/__tests__/test-components/Toolbar.spec.tsx b/src/__tests__/test-components/Toolbar.spec.tsx index 01137ae81..9bd0b85c7 100644 --- a/src/__tests__/test-components/Toolbar.spec.tsx +++ b/src/__tests__/test-components/Toolbar.spec.tsx @@ -1,14 +1,13 @@ import { nullTranslator } from '@jupyterlab/translation'; -import { refreshIcon } from '@jupyterlab/ui-components'; -import { shallow } from 'enzyme'; +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import 'jest'; import * as React from 'react'; -import { ActionButton } from '../../components/ActionButton'; import { IToolbarProps, Toolbar } from '../../components/Toolbar'; import * as git from '../../git'; import { GitExtension } from '../../model'; -import { pullIcon, pushIcon } from '../../style/icons'; -import { toolbarMenuButtonClass } from '../../style/Toolbar'; +import { badgeClass } from '../../style/Toolbar'; import { DEFAULT_REPOSITORY_PATH, mockedRequestAPI } from '../utils'; import { CommandIDs } from '../../tokens'; @@ -49,7 +48,7 @@ describe('Toolbar', () => { ], tagsList: model.tagsList, pastCommits: [], - repository: model.pathRepository, + repository: model.pathRepository!, model: model, branching: false, nCommitsAhead: 0, @@ -66,164 +65,122 @@ describe('Toolbar', () => { jest.restoreAllMocks(); const mock = git as jest.Mocked<typeof git>; - mock.requestAPI.mockImplementation(mockedRequestAPI()); + mock.requestAPI.mockImplementation(mockedRequestAPI() as any); model = await createModel(); }); describe('constructor', () => { - it('should return a new instance', () => { - const el = shallow(<Toolbar {...createProps()} />); - expect(el.instance()).toBeInstanceOf(Toolbar); - }); - it('should set the default flag indicating whether to show a branch menu to `false`', () => { - const el = shallow<Toolbar>(<Toolbar {...createProps()} />); - expect(el.state().branchMenu).toEqual(false); + render(<Toolbar {...createProps()} />); + + expect(screen.queryByText('Branches')).toBeNull(); }); }); describe('render', () => { it('should display a button to pull the latest changes', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const nodes = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === pullIcon); - expect(nodes.length).toEqual(1); + render(<Toolbar {...createProps()} />); expect( - toolbar.find('[data-test-id="pull-badge"]').prop('invisible') - ).toEqual(true); - }); - - it('should set the `title` attribute on the button to pull the latest changes', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const button = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === pullIcon); + screen.getAllByRole('button', { name: 'Pull latest changes' }) + ).toBeDefined(); - expect(button.prop('title')).toEqual('Pull latest changes'); + expect( + screen + .getByRole('button', { name: 'Pull latest changes' }) + .parentElement?.querySelector(`.${badgeClass} > .MuiBadge-badge`) + ).toHaveClass('MuiBadge-invisible'); }); it('should display a badge on pull icon if behind', () => { - const toolbar = shallow<Toolbar>( - <Toolbar {...createProps({ nCommitsBehind: 1 })} /> - ); + render(<Toolbar {...createProps({ nCommitsBehind: 1 })} />); expect( - toolbar.find('[data-test-id="pull-badge"]').prop('invisible') - ).toEqual(false); + screen + .getByRole('button', { name: /^Pull latest changes/ }) + .parentElement?.querySelector(`.${badgeClass} > .MuiBadge-badge`) + ).not.toHaveClass('MuiBadge-invisible'); }); it('should display a button to push the latest changes', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const nodes = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === pushIcon); - expect(nodes.length).toEqual(1); + render(<Toolbar {...createProps()} />); expect( - toolbar.find('[data-test-id="push-badge"]').prop('invisible') - ).toEqual(true); - }); - - it('should set the `title` attribute on the button to push the latest changes', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const button = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === pushIcon) - .first(); + screen.getAllByRole('button', { name: 'Push committed changes' }) + ).toBeDefined(); - expect(button.prop('title')).toEqual('Push committed changes'); + expect( + screen + .getByRole('button', { name: 'Push committed changes' }) + .parentElement?.querySelector(`.${badgeClass} > .MuiBadge-badge`) + ).toHaveClass('MuiBadge-invisible'); }); - it('should display a badge on pull icon if behind', () => { - const toolbar = shallow<Toolbar>( - <Toolbar {...createProps({ nCommitsAhead: 1 })} /> - ); + it('should display a badge on push icon if behind', () => { + render(<Toolbar {...createProps({ nCommitsAhead: 1 })} />); expect( - toolbar.find('[data-test-id="push-badge"]').prop('invisible') - ).toEqual(false); + screen + .getByRole('button', { name: /^Push committed changes/ }) + .parentElement?.querySelector(`.${badgeClass} > .MuiBadge-badge`) + ).not.toHaveClass('MuiBadge-invisible'); }); it('should display a button to refresh the current repository', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const nodes = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === refreshIcon); - - expect(nodes.length).toEqual(1); - }); - - it('should set the `title` attribute on the button to refresh the current repository', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const button = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === refreshIcon) - .first(); + render(<Toolbar {...createProps()} />); - expect(button.prop('title')).toEqual( - 'Refresh the repository to detect local and remote changes' - ); + expect( + screen.getAllByRole('button', { + name: 'Refresh the repository to detect local and remote changes' + }) + ).toBeDefined(); }); it('should display a button to toggle a repository menu', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const button = toolbar.find(`.${toolbarMenuButtonClass}`).first(); + render(<Toolbar {...createProps()} />); - const text = button.text(); - expect(text.includes('Current Repository')).toEqual(true); - }); - - it('should set the `title` attribute on the button to toggle a repository menu', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const button = toolbar.find(`.${toolbarMenuButtonClass}`).first(); - - const bool = button.prop('title').includes('Current repository: '); - expect(bool).toEqual(true); + expect(screen.getByText('Current Repository')).toBeDefined(); }); it('should display a button to toggle a branch menu', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const button = toolbar.find(`.${toolbarMenuButtonClass}`).at(1); + render(<Toolbar {...createProps()} />); - const text = button.text(); - expect(text.includes('Current Branch')).toEqual(true); + expect(screen.getByText('Current Branch')).toBeDefined(); }); it('should set the `title` attribute on the button to toggle a branch menu', () => { const currentBranch = 'main'; - const toolbar = shallow<Toolbar>( - <Toolbar {...createProps({ currentBranch })} /> - ); - const button = toolbar.find(`.${toolbarMenuButtonClass}`).at(1); + render(<Toolbar {...createProps({ currentBranch })} />); - expect(button.prop('title')).toEqual('Manage branches and tags'); + expect( + screen.getByRole('button', { name: /^Current Branch/ }) + ).toHaveAttribute('title', 'Manage branches and tags'); }); }); describe('branch menu', () => { it('should not, by default, display a branch menu', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const nodes = toolbar.find('BranchMenu'); + render(<Toolbar {...createProps()} />); - expect(nodes.length).toEqual(0); + expect(screen.queryByText('Branches')).toBeNull(); }); - it('should display a branch menu when the button to display a branch menu is clicked', () => { - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const button = toolbar.find(`.${toolbarMenuButtonClass}`).at(1); + it('should display a branch menu when the button to display a branch menu is clicked', async () => { + render(<Toolbar {...createProps()} />); - button.simulate('click'); - expect(toolbar.find('BranchMenu').length).toEqual(1); + await userEvent.click( + screen.getByRole('button', { name: /^Current Branch/ }) + ); + + expect(screen.getByText('Branches')).toBeDefined(); }); }); describe('pull changes', () => { - it('should pull changes when the button to pull the latest changes is clicked', () => { + it('should pull changes when the button to pull the latest changes is clicked', async () => { const mockedExecute = jest.fn(); - const toolbar = shallow<Toolbar>( + render( <Toolbar {...createProps({ commands: { @@ -232,19 +189,18 @@ describe('Toolbar', () => { })} /> ); - const button = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === pullIcon) - .first(); - button.simulate('click'); + await userEvent.click( + screen.getByRole('button', { name: 'Pull latest changes' }) + ); + expect(mockedExecute).toHaveBeenCalledTimes(1); expect(mockedExecute).toHaveBeenCalledWith(CommandIDs.gitPull); }); - it('should not pull changes when the pull button is clicked but there is no remote branch', () => { + it('should not pull changes when the pull button is clicked but there is no remote branch', async () => { const mockedExecute = jest.fn(); - const toolbar = shallow<Toolbar>( + render( <Toolbar {...createProps({ branches: [ @@ -263,20 +219,21 @@ describe('Toolbar', () => { })} /> ); - const button = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === pullIcon) - .first(); - button.simulate('click'); + await userEvent.click( + screen.getAllByRole('button', { + name: 'No remote repository defined' + })[0] + ); + expect(mockedExecute).toHaveBeenCalledTimes(0); }); }); describe('push changes', () => { - it('should push changes when the button to push the latest changes is clicked', () => { + it('should push changes when the button to push the latest changes is clicked', async () => { const mockedExecute = jest.fn(); - const toolbar = shallow<Toolbar>( + render( <Toolbar {...createProps({ commands: { @@ -285,19 +242,16 @@ describe('Toolbar', () => { })} /> ); - const button = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === pushIcon) - .first(); - - button.simulate('click'); + await userEvent.click( + screen.getByRole('button', { name: 'Push committed changes' }) + ); expect(mockedExecute).toHaveBeenCalledTimes(1); expect(mockedExecute).toHaveBeenCalledWith(CommandIDs.gitPush); }); - it('should not push changes when the push button is clicked but there is no remote branch', () => { + it('should not push changes when the push button is clicked but there is no remote branch', async () => { const mockedExecute = jest.fn(); - const toolbar = shallow<Toolbar>( + render( <Toolbar {...createProps({ branches: [ @@ -316,26 +270,24 @@ describe('Toolbar', () => { })} /> ); - const button = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === pushIcon) - .first(); - - button.simulate('click'); + await userEvent.click( + screen.getAllByRole('button', { + name: 'No remote repository defined' + })[1] + ); expect(mockedExecute).toHaveBeenCalledTimes(0); }); }); describe('refresh repository', () => { - it('should refresh the repository when the button to refresh the repository is clicked', () => { + it('should refresh the repository when the button to refresh the repository is clicked', async () => { const spy = jest.spyOn(model, 'refresh'); - const toolbar = shallow<Toolbar>(<Toolbar {...createProps()} />); - const button = toolbar - .find(ActionButton) - .findWhere(n => n.prop('icon') === refreshIcon) - .first(); - - button.simulate('click'); + render(<Toolbar {...createProps()} />); + await userEvent.click( + screen.getByRole('button', { + name: 'Refresh the repository to detect local and remote changes' + }) + ); expect(spy).toHaveBeenCalledTimes(1); spy.mockReset(); diff --git a/src/__tests__/utils.ts b/src/__tests__/utils.ts index 693ea5a59..428475086 100644 --- a/src/__tests__/utils.ts +++ b/src/__tests__/utils.ts @@ -10,7 +10,7 @@ export interface IMockedResponse { export interface IMockedResponses { // Folder path in URI; default = DEFAULT_REPOSITORY_PATH - path?: string; + path?: string | null; // Endpoint responses?: { [endpoint: string]: IMockedResponse; @@ -23,37 +23,42 @@ export const defaultMockedResponses: { [endpoint: string]: IMockedResponse; } = { branch: { - body: () => { - return { - code: 0, - branches: [], - current_branch: { name: '' } - }; - } + body: () => ({ + code: 0, + branches: [], + current_branch: { name: '' } + }) }, changed_files: { - body: () => { - return { - code: 0, - files: [] - }; - } + body: () => ({ + code: 0, + files: [] + }) }, show_prefix: { - body: () => { - return { - code: 0, - path: '' - }; - } + body: () => ({ + code: 0, + path: '' + }) + }, + stash: { + body: () => ({ + code: 0, + message: '', + command: '' + }) }, status: { - body: () => { - return { - code: 0, - files: [] - }; - } + body: () => ({ + code: 0, + files: [] + }) + }, + tags: { + body: () => ({ + code: 0, + tags: [] + }) } }; diff --git a/src/commandsAndMenu.tsx b/src/commandsAndMenu.tsx index 64c35cb1b..61ffbeefd 100644 --- a/src/commandsAndMenu.tsx +++ b/src/commandsAndMenu.tsx @@ -1622,7 +1622,6 @@ export function addCommands( const dialog = ReactWidget.create( <NewTagDialogBox pastCommits={[commit.commit]} - logger={logger} model={gitModel} trans={trans} open={tagDialog} @@ -1639,35 +1638,34 @@ export function addCommands( const tagName = await waitForDialog.promise; if (tagName) { - logger.log({ - level: Level.RUNNING, - message: trans.__( - "Create tag pointing to '%1'...", - commit.commit.commit_msg - ) - }); + const id = Notification.emit( + trans.__("Create tag pointing to '%1'...", commit.commit.commit_msg), + 'in-progress' + ); try { await gitModel.setTag(tagName, commit.commit.commit); } catch (err) { - logger.log({ - level: Level.ERROR, + Notification.update({ + id, message: trans.__( "Failed to create tag '%1' poining to '%2'.", tagName, commit ), - error: err as Error + type: 'error', + ...showError(err as any, trans) }); return; } - logger.log({ - level: Level.SUCCESS, + Notification.update({ + id, message: trans.__( "Created tag '%1' pointing to '%2'.", tagName, commit - ) + ), + type: 'success' }); } }, diff --git a/src/components/BranchMenu.tsx b/src/components/BranchMenu.tsx index ba2222b85..d33b2901b 100644 --- a/src/components/BranchMenu.tsx +++ b/src/components/BranchMenu.tsx @@ -275,6 +275,7 @@ export class BranchMenu extends React.Component< isActive ? activeListItemClass : null )} onClick={this._onBranchClickFactory(branch.name)} + role="listitem" style={style} > <branchIcon.react className={listItemIconClass} tag="span" /> diff --git a/src/components/FileItem.tsx b/src/components/FileItem.tsx index 9bab17ab4..832fdec96 100644 --- a/src/components/FileItem.tsx +++ b/src/components/FileItem.tsx @@ -19,19 +19,6 @@ import { fileLabelStyle } from '../style/FilePathStyle'; import { Git } from '../tokens'; import { FilePath } from './FilePath'; -// Git status codes https://git-scm.com/docs/git-status -export const STATUS_CODES = { - M: 'Modified', - A: 'Added', - D: 'Deleted', - R: 'Renamed', - C: 'Copied', - U: 'Updated', - B: 'Behind', - '?': 'Untracked', - '!': 'Ignored' -}; - /** * File marker properties */ @@ -168,8 +155,11 @@ export class FileItem extends React.PureComponent<IFileItemProps> { } }; - protected _getFileChangedLabel(change: keyof typeof STATUS_CODES): string { - return STATUS_CODES[change] || 'Unmodified'; + protected _getFileChangedLabel( + change: string, + trans: TranslationBundle + ): string { + return Private.get_status(change, trans) || trans.__('Unmodified'); } protected _getFileChangedLabelClass(change: string): string { @@ -215,8 +205,8 @@ export class FileItem extends React.PureComponent<IFileItemProps> { const status_code = file.status === 'staged' ? file.x : file.y; const status = file.status === 'unmerged' - ? 'Conflicted' - : this._getFileChangedLabel(status_code as any); + ? this.props.trans.__('Conflicted') + : this._getFileChangedLabel(status_code as any, this.props.trans); return ( <div @@ -268,3 +258,24 @@ export class FileItem extends React.PureComponent<IFileItemProps> { ); } } + +namespace Private { + let i18nCodes: Record<string, string> | null = null; + export function get_status(code: string, trans: TranslationBundle): string { + if (!i18nCodes) { + // Git status codes https://git-scm.com/docs/git-status + i18nCodes = { + M: trans.__('Modified'), + A: trans.__('Added'), + D: trans.__('Deleted'), + R: trans.__('Renamed'), + C: trans.__('Copied'), + U: trans.__('Updated'), + B: trans.__('Behind'), + '?': trans.__('Untracked'), + '!': trans.__('Ignored') + }; + } + return i18nCodes[code]; + } +} diff --git a/src/components/GitCommitGraph.tsx b/src/components/GitCommitGraph.tsx index bbec73182..4a2ac196b 100644 --- a/src/components/GitCommitGraph.tsx +++ b/src/components/GitCommitGraph.tsx @@ -114,7 +114,7 @@ export class GitCommitGraph extends React.Component<IGitCommitGraphProps> { const colour = getColour(branch); const style = { stroke: colour, - 'stroke-width': this._lineWidth, + strokeWidth: this._lineWidth, fill: 'none' }; @@ -165,7 +165,7 @@ export class GitCommitGraph extends React.Component<IGitCommitGraphProps> { const strokeWidth = 1; const style = { stroke: colour, - 'stroke-width': strokeWidth, + strokeWidth: strokeWidth, fill: colour }; @@ -222,7 +222,7 @@ export class GitCommitGraph extends React.Component<IGitCommitGraphProps> { const height = this.getHeight(); const width = this.getWidth(); - const style = { height, width, 'flex-shrink': 0 }; + const style = { height, width, flexShrink: 0 }; return ( <svg height={height} width={width} style={style}> diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index 2e0694415..6ee37d175 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -167,7 +167,6 @@ export class Toolbar extends React.Component<IToolbarProps, IToolbarState> { className={badgeClass} variant="dot" invisible={!hasRemote || this.props.nCommitsBehind === 0} - data-test-id="pull-badge" > <ActionButton className={toolbarButtonClass} @@ -193,7 +192,6 @@ export class Toolbar extends React.Component<IToolbarProps, IToolbarState> { invisible={ !hasRemote || (this.props.nCommitsAhead === 0 && hasUpstream) } - data-test-id="push-badge" > <ActionButton className={toolbarButtonClass} diff --git a/src/components/diff/PlainTextDiff.ts b/src/components/diff/PlainTextDiff.ts index a37cb1a83..cd068eb08 100644 --- a/src/components/diff/PlainTextDiff.ts +++ b/src/components/diff/PlainTextDiff.ts @@ -62,7 +62,7 @@ export class PlainTextDiff extends Panel implements Git.Diff.IDiffWidget { editorFactory }: { model: Git.Diff.IModel; - languageRegistry: IEditorLanguageRegistry; + languageRegistry?: IEditorLanguageRegistry; editorFactory?: CodeEditor.Factory; trans?: TranslationBundle; }) { @@ -80,8 +80,9 @@ export class PlainTextDiff extends Panel implements Git.Diff.IDiffWidget { ); const getReady = new PromiseDelegate<void>(); this._isReady = getReady.promise; - this._editorFactory = editorFactory ?? createEditorFactory(); - this._languageRegistry = languageRegistry; + this._languageRegistry = languageRegistry ?? new EditorLanguageRegistry(); + this._editorFactory = + editorFactory ?? createEditorFactory(this._languageRegistry); this._model = model; this._trans = trans ?? nullTranslator.load('jupyterlab_git'); @@ -399,10 +400,12 @@ function createStringDiffModel( * * @returns Editor factory */ -function createEditorFactory(): CodeEditor.Factory { +function createEditorFactory( + languages: IEditorLanguageRegistry +): CodeEditor.Factory { const factory = new CodeMirrorEditorFactory({ extensions: new EditorExtensionRegistry(), - languages: new EditorLanguageRegistry() + languages }); return factory.newInlineEditor.bind(factory); diff --git a/src/model.ts b/src/model.ts index e15939ffb..368f5a0a3 100644 --- a/src/model.ts +++ b/src/model.ts @@ -406,12 +406,14 @@ export class GitExtension implements IGitExtension { * @returns The file status or null if path repository is null or path not in repository */ getFile(path: string): Git.IStatusFile | null { - if (!this.pathRepository || this._status === null) { + if (this.pathRepository === null) { return null; } - const fileStatus = this._status.files.find(status => { - return this.getRelativeFilePath(status.to) === path; - }); + const fileStatus = this._status?.files + ? this._status.files.find(status => { + return this.getRelativeFilePath(status.to) === path; + }) + : null; if (!fileStatus) { const relativePath = PathExt.relative( diff --git a/src/style/Toolbar.ts b/src/style/Toolbar.ts index 36f95aacf..01b61bb91 100644 --- a/src/style/Toolbar.ts +++ b/src/style/Toolbar.ts @@ -117,7 +117,7 @@ export const badgeClass = style({ $nest: { '& > .MuiBadge-badge': { top: 12, - right: 15, + right: 5, backgroundColor: 'var(--jp-warn-color1)' } } diff --git a/style/diff-common.css b/style/diff-common.css index ea90b3b54..a67f49058 100644 --- a/style/diff-common.css +++ b/style/diff-common.css @@ -60,7 +60,13 @@ button.jp-git-diff-resolve .jp-ToolbarButtonComponent-label { .jp-git-diff-banner span { padding: 0 4px; font-weight: bold; + overflow: hidden; + text-overflow: ellipsis; +} +.jp-git-merge-banner span { + padding: 0 4px; + font-weight: bold; overflow: hidden; text-overflow: ellipsis; } @@ -86,14 +92,6 @@ button.jp-git-diff-resolve .jp-ToolbarButtonComponent-label { gap: 10px; } -.jp-git-merge-banner span { - padding: 0 4px; - font-weight: bold; - - overflow: hidden; - text-overflow: ellipsis; -} - .jp-git-merge-banner span:first-of-type { background-color: var(--jp-merge-local-color1); } @@ -149,14 +147,12 @@ button.jp-git-diff-resolve .jp-ToolbarButtonComponent-label { background-color: var(--jp-git-diff-deleted-color); } -.jp-git-diff-root .cm-merge-left-editor .cm-merge-l-chunk:not(.jp-Merge-conflict) { +.jp-git-diff-root + .cm-merge-left-editor + .cm-merge-l-chunk:not(.jp-Merge-conflict) { background-color: var(--jp-merge-local-color); } -.jp-git-diff-root .cm-merge-left-editor .cm-merge-l-inserted { - background-color: var(--jp-merge-local-color1); -} - .jp-git-diff-root .cm-merge-r-inserted, .jp-git-diff-root .cm-merge-l-inserted, .jp-git-diff-root .cm-diff-right-editor .cm-merge-r-chunk, @@ -164,6 +160,10 @@ button.jp-git-diff-resolve .jp-ToolbarButtonComponent-label { background-color: var(--jp-git-diff-added-color); } +.jp-git-diff-root .cm-merge-left-editor .cm-merge-l-inserted { + background-color: var(--jp-merge-local-color1); +} + .jp-git-diff-root .cm-merge-spacer { background-image: repeating-linear-gradient( 145deg, diff --git a/style/variables.css b/style/variables.css index b941bb77f..bb2cdfb03 100644 --- a/style/variables.css +++ b/style/variables.css @@ -10,7 +10,6 @@ --jp-git-diff-deleted-color1: rgb(255 0 0 / 40%); --jp-git-diff-output-border-color: rgb(0 141 255 / 70%); --jp-git-diff-output-color: rgb(0 141 255 / 30%); - --jp-merge-local-color: rgb(31 31 224 / 20%); --jp-merge-local-color1: rgb(31 31 224 / 40%); } diff --git a/testutils/jest-file-mock.js b/testutils/jest-file-mock.js deleted file mode 100644 index 86059f362..000000000 --- a/testutils/jest-file-mock.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = 'test-file-stub'; diff --git a/testutils/jest-setup-files.js b/testutils/jest-setup-files.js index 9c71967dd..b365082fc 100644 --- a/testutils/jest-setup-files.js +++ b/testutils/jest-setup-files.js @@ -1,7 +1,92 @@ -globalThis.fetch = require('jest-fetch-mock'); -// Use node crypto for crypto -globalThis.crypto = require('crypto'); - -require('enzyme').configure({ - adapter: new (require('@wojtekmaj/enzyme-adapter-react-17'))() +/* global globalThis */ +globalThis.DragEvent = class DragEvent {}; +if ( + typeof globalThis.TextDecoder === 'undefined' || + typeof globalThis.TextEncoder === 'undefined' +) { + const util = require('util'); + globalThis.TextDecoder = util.TextDecoder; + globalThis.TextEncoder = util.TextEncoder; +} +const fetchMod = (window.fetch = require('node-fetch')); +window.Request = fetchMod.Request; +window.Headers = fetchMod.Headers; +window.Response = fetchMod.Response; +globalThis.Image = window.Image; +window.focus = () => { + /* JSDom throws "Not Implemented" */ +}; +window.document.elementFromPoint = (left, top) => document.body; +if (!window.hasOwnProperty('getSelection')) { + // Minimal getSelection() that supports a fake selection + window.getSelection = function getSelection() { + return { + _selection: '', + selectAllChildren: () => { + this._selection = 'foo'; + }, + toString: () => { + const val = this._selection; + this._selection = ''; + return val; + } + }; + }; +} +// Used by xterm.js +window.matchMedia = function (media) { + return { + matches: false, + media, + onchange: () => { + /* empty */ + }, + addEventListener: () => { + /* empty */ + }, + removeEventListener: () => { + /* empty */ + }, + dispatchEvent: () => { + return true; + }, + addListener: () => { + /* empty */ + }, + removeListener: () => { + /* empty */ + } + }; +}; +process.on('unhandledRejection', (error, promise) => { + console.error('Unhandled promise rejection somewhere in tests'); + if (error) { + console.error(error); + const stack = error.stack; + if (stack) { + console.error(stack); + } + } + promise.catch(err => console.error('promise rejected', err)); }); +if (window.requestIdleCallback === undefined) { + // On Safari, requestIdleCallback is not available, so we use replacement functions for `idleCallbacks` + // See: https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API#falling_back_to_settimeout + // eslint-disable-next-line @typescript-eslint/ban-types + window.requestIdleCallback = function (handler) { + let startTime = Date.now(); + return setTimeout(function () { + handler({ + didTimeout: false, + timeRemaining: function () { + return Math.max(0, 50.0 - (Date.now() - startTime)); + } + }); + }, 1); + }; + window.cancelIdleCallback = function (id) { + clearTimeout(id); + }; +} + +globalThis.ResizeObserver = require('resize-observer-polyfill'); diff --git a/yarn.lock b/yarn.lock index 2bb49aa22..fb9d63c49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,13 @@ __metadata: languageName: node linkType: hard +"@adobe/css-tools@npm:^4.3.1": + version: 4.3.1 + resolution: "@adobe/css-tools@npm:4.3.1" + checksum: ad43456379ff391132aff687ece190cb23ea69395e23c9b96690eeabe2468da89a4aaf266e4f8b6eaab53db3d1064107ce0f63c3a974e864f4a04affc768da3f + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -22,7 +29,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13": version: 7.22.13 resolution: "@babel/code-frame@npm:7.22.13" dependencies: @@ -1307,6 +1314,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.9.2": + version: 7.23.2 + resolution: "@babel/runtime@npm:7.23.2" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 6c4df4839ec75ca10175f636d6362f91df8a3137f86b38f6cd3a4c90668a0fe8e9281d320958f4fbd43b394988958585a17c3aab2a4ea6bf7316b22916a371fb + languageName: node + linkType: hard + "@babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.3.3": version: 7.22.15 resolution: "@babel/template@npm:7.22.15" @@ -2157,19 +2173,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/types@npm:26.6.2" - 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 - checksum: a0bd3d2f22f26ddb23f41fddf6e6a30bf4fab2ce79ec1cb6ce6fdfaf90a72e00f4c71da91ec61e13db3b10c41de22cf49d07c57ff2b59171d64b29f909c1d8d6 - languageName: node - linkType: hard - "@jest/types@npm:^29.6.3": version: 29.6.3 resolution: "@jest/types@npm:29.6.3" @@ -2636,8 +2639,10 @@ __metadata: "@mui/lab": ^5.0.0-alpha.127 "@mui/material": ^5.12.1 "@mui/styles": ^5.12.0 + "@testing-library/jest-dom": ^6.1.4 + "@testing-library/react": ^14.0.0 + "@testing-library/user-event": ^14.5.1 "@types/diff-match-patch": ^1.0.32 - "@types/enzyme": ^3.1.15 "@types/jest": ^29.2.0 "@types/json-schema": ^7.0.11 "@types/react": ^18.0.26 @@ -2648,11 +2653,9 @@ __metadata: "@types/resize-observer-browser": ^0.1.7 "@typescript-eslint/eslint-plugin": ^6.1.0 "@typescript-eslint/parser": ^6.1.0 - "@wojtekmaj/enzyme-adapter-react-17": ^0.8.0 all-contributors-cli: ^6.14.0 css-loader: ^6.7.1 diff-match-patch: ^1.0.4 - enzyme: ^3.7.0 eslint: ^8.36.0 eslint-config-prettier: ^8.8.0 eslint-plugin-prettier: ^5.0.0 @@ -2662,7 +2665,6 @@ __metadata: husky: ^8.0.3 identity-obj-proxy: ^3.0.0 jest: ^29.2.0 - jest-fetch-mock: ^3.0.0 lint-staged: ^13.2.3 mkdirp: ^1.0.3 nbdime: ^7.0.0-alpha.2 @@ -2673,6 +2675,7 @@ __metadata: react-dom: ^18.2.0 react-virtualized-auto-sizer: ^1.0.2 react-window: ^1.8.5 + resize-observer-polyfill: ^1.5.1 rimraf: ^5.0.1 source-map-loader: ^1.0.2 style-loader: ^3.3.1 @@ -2681,7 +2684,7 @@ __metadata: stylelint-config-standard: ^34.0.0 stylelint-csstree-validator: ^3.0.0 stylelint-prettier: ^4.0.0 - ts-jest: ^26.0.0 + ts-jest: ^29.1.0 typescript: ~5.0.2 typestyle: ^2.0.1 yjs: ^13.5.40 @@ -3695,6 +3698,75 @@ __metadata: languageName: node linkType: hard +"@testing-library/dom@npm:^9.0.0": + version: 9.3.3 + resolution: "@testing-library/dom@npm:9.3.3" + dependencies: + "@babel/code-frame": ^7.10.4 + "@babel/runtime": ^7.12.5 + "@types/aria-query": ^5.0.1 + aria-query: 5.1.3 + chalk: ^4.1.0 + dom-accessibility-api: ^0.5.9 + lz-string: ^1.5.0 + pretty-format: ^27.0.2 + checksum: 34e0a564da7beb92aa9cc44a9080221e2412b1a132eb37be3d513fe6c58027674868deb9f86195756d98d15ba969a30fe00632a4e26e25df2a5a4f6ac0686e37 + languageName: node + linkType: hard + +"@testing-library/jest-dom@npm:^6.1.4": + version: 6.1.4 + resolution: "@testing-library/jest-dom@npm:6.1.4" + dependencies: + "@adobe/css-tools": ^4.3.1 + "@babel/runtime": ^7.9.2 + aria-query: ^5.0.0 + chalk: ^3.0.0 + css.escape: ^1.5.1 + dom-accessibility-api: ^0.5.6 + lodash: ^4.17.15 + redent: ^3.0.0 + peerDependencies: + "@jest/globals": ">= 28" + "@types/jest": ">= 28" + jest: ">= 28" + vitest: ">= 0.32" + peerDependenciesMeta: + "@jest/globals": + optional: true + "@types/jest": + optional: true + jest: + optional: true + vitest: + optional: true + checksum: c6bd9469554136a25d94b55ea16736d56b8c5d200526023774dbf35ca35551a721257e6734f1b404bbd07ae0a1950f1912b5be60e113db2ff2ff50af14f7085c + languageName: node + linkType: hard + +"@testing-library/react@npm:^14.0.0": + version: 14.0.0 + resolution: "@testing-library/react@npm:14.0.0" + dependencies: + "@babel/runtime": ^7.12.5 + "@testing-library/dom": ^9.0.0 + "@types/react-dom": ^18.0.0 + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 4a54c8f56cc4a39b50803205f84f06280bb76521d6d5d4b3b36651d760c7c7752ef142d857d52aaf4fad4848ed7a8be49afc793a5dda105955d2f8bef24901ac + languageName: node + linkType: hard + +"@testing-library/user-event@npm:^14.5.1": + version: 14.5.1 + resolution: "@testing-library/user-event@npm:14.5.1" + peerDependencies: + "@testing-library/dom": ">=7.21.4" + checksum: 3e6bc9fd53dfe2f3648190193ed2fd4bca2a1bfb47f68810df3b33f05412526e5fd5c4ef9dc5375635e0f4cdf1859916867b597eed22bda1321e04242ea6c519 + languageName: node + linkType: hard + "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -3702,6 +3774,13 @@ __metadata: languageName: node linkType: hard +"@types/aria-query@npm:^5.0.1": + version: 5.0.2 + resolution: "@types/aria-query@npm:5.0.2" + checksum: 19394fea016e72da39dd5ef1cf1643e3252b7ee99d8f0b3a8740d3b72f874443fc1e00a41935b36fdfaf92cd735d4ae10dc5d6ab8f1192527d4c0471bb8ff8e4 + languageName: node + linkType: hard + "@types/babel__core@npm:^7.1.14": version: 7.20.2 resolution: "@types/babel__core@npm:7.20.2" @@ -3743,15 +3822,6 @@ __metadata: languageName: node linkType: hard -"@types/cheerio@npm:*": - version: 0.22.31 - resolution: "@types/cheerio@npm:0.22.31" - dependencies: - "@types/node": "*" - checksum: 8d73d22fdd384c290514dad6f9f4a436f5a90bc836bbe9b46fe4f557041a03484f0547291d0347185a806149f465355fc225dc87477b8cf5af5be307bb75e6a4 - languageName: node - linkType: hard - "@types/diff-match-patch@npm:^1.0.32": version: 1.0.32 resolution: "@types/diff-match-patch@npm:1.0.32" @@ -3759,16 +3829,6 @@ __metadata: languageName: node linkType: hard -"@types/enzyme@npm:^3.1.15": - version: 3.10.12 - resolution: "@types/enzyme@npm:3.10.12" - dependencies: - "@types/cheerio": "*" - "@types/react": "*" - checksum: 356e9142566b68c9b324ae71a7b93f03512a1c009a1d337a25ce4f495590f3e79de08aa4a0016d6224cb228c27832d92b6d7d3276ba5962302c41d0577e8a912 - languageName: node - linkType: hard - "@types/eslint-scope@npm:^3.7.3": version: 3.7.4 resolution: "@types/eslint-scope@npm:3.7.4" @@ -3902,6 +3962,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^18.0.0": + version: 18.2.13 + resolution: "@types/react-dom@npm:18.2.13" + dependencies: + "@types/react": "*" + checksum: 22ba066b141dca5a5a9227fae0afc7c94b470fff8e8a38ade72649da57a8ea04d0cb2ba3e22005e7d8e772d49bddd28855b1dd98e6defd033bba6afb6edff883 + languageName: node + linkType: hard + "@types/react-dom@npm:^18.2.0": version: 18.2.10 resolution: "@types/react-dom@npm:18.2.10" @@ -4009,15 +4078,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^15.0.0": - version: 15.0.15 - resolution: "@types/yargs@npm:15.0.15" - dependencies: - "@types/yargs-parser": "*" - checksum: 3420f6bcc508a895ef91858f8e6de975c710e4498cf6ed293f1174d3f1ad56edb4ab8481219bf6190f64a3d4115fab1d13ab3edc90acd54fba7983144040e446 - languageName: node - linkType: hard - "@types/yargs@npm:^17.0.8": version: 17.0.26 resolution: "@types/yargs@npm:17.0.26" @@ -4334,38 +4394,6 @@ __metadata: languageName: node linkType: hard -"@wojtekmaj/enzyme-adapter-react-17@npm:^0.8.0": - version: 0.8.0 - resolution: "@wojtekmaj/enzyme-adapter-react-17@npm:0.8.0" - dependencies: - "@wojtekmaj/enzyme-adapter-utils": ^0.2.0 - enzyme-shallow-equal: ^1.0.0 - has: ^1.0.0 - prop-types: ^15.7.0 - react-is: ^17.0.0 - react-test-renderer: ^17.0.0 - peerDependencies: - enzyme: ^3.0.0 - react: ^17.0.0-0 - react-dom: ^17.0.0-0 - checksum: aa9674f06f6db269b72168ebf46c4513938993479eb60bac30cb6183b5aca6108ade3d08af4f56c142cb219415480d0c4b454ba9452b85c32f711c806b39cd8c - languageName: node - linkType: hard - -"@wojtekmaj/enzyme-adapter-utils@npm:^0.2.0": - version: 0.2.0 - resolution: "@wojtekmaj/enzyme-adapter-utils@npm:0.2.0" - dependencies: - function.prototype.name: ^1.1.0 - has: ^1.0.0 - object.fromentries: ^2.0.0 - prop-types: ^15.7.0 - peerDependencies: - react: ^17.0.0-0 - checksum: 837741f1382acdb02ce304745eccfdcff03f1cae2a4fb833056a7a753308cd1182b0b32a10a04be6bfedaaab8f4acd5b458bfe0b9ebaa6119c4aaaba74a14ae4 - languageName: node - linkType: hard - "@xtuc/ieee754@npm:^1.2.0": version: 1.2.0 resolution: "@xtuc/ieee754@npm:1.2.0" @@ -4642,6 +4670,24 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:5.1.3": + version: 5.1.3 + resolution: "aria-query@npm:5.1.3" + dependencies: + deep-equal: ^2.0.5 + checksum: 929ff95f02857b650fb4cbcd2f41072eee2f46159a6605ea03bf63aa572e35ffdff43d69e815ddc462e16e07de8faba3978afc2813650b4448ee18c9895d982b + languageName: node + linkType: hard + +"aria-query@npm:^5.0.0": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: ^2.0.3 + checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 + languageName: node + linkType: hard + "array-buffer-byte-length@npm:^1.0.0": version: 1.0.0 resolution: "array-buffer-byte-length@npm:1.0.0" @@ -4672,31 +4718,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.filter@npm:^1.0.0": - version: 1.0.1 - resolution: "array.prototype.filter@npm:1.0.1" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - es-array-method-boxes-properly: ^1.0.0 - is-string: ^1.0.7 - checksum: 574b52dcebf2def7bedb05449b60e5e3819093fa77f88c3f87a9611361d2745c7aacde01cd3ed7accafd632ee1e0340b655dd26dc7c060429cb4566058e63134 - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.2.3": - version: 1.3.0 - resolution: "array.prototype.flat@npm:1.3.0" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.2 - es-shim-unscopables: ^1.0.0 - checksum: 2a652b3e8dc0bebb6117e42a5ab5738af0203a14c27341d7bb2431467bdb4b348e2c5dc555dfcda8af0a5e4075c400b85311ded73861c87290a71a17c3e0a257 - languageName: node - linkType: hard - "array.prototype.flatmap@npm:^1.3.1": version: 1.3.1 resolution: "array.prototype.flatmap@npm:1.3.1" @@ -4908,13 +4929,6 @@ __metadata: languageName: node linkType: hard -"boolbase@npm:^1.0.0": - version: 1.0.0 - resolution: "boolbase@npm:1.0.0" - checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 - languageName: node - linkType: hard - "bplist-parser@npm:^0.2.0": version: 0.2.0 resolution: "bplist-parser@npm:0.2.0" @@ -4984,7 +4998,7 @@ __metadata: languageName: node linkType: hard -"buffer-from@npm:1.x, buffer-from@npm:^1.0.0": +"buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb @@ -5088,6 +5102,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 8e3ddf3981c4da405ddbd7d9c8d91944ddf6e33d6837756979f7840a29272a69a5189ecae0ff84006750d6d1e92368d413335eab4db5476db6e6703a1d1e0505 + languageName: node + linkType: hard + "chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -5112,35 +5136,6 @@ __metadata: languageName: node linkType: hard -"cheerio-select@npm:^2.1.0": - version: 2.1.0 - resolution: "cheerio-select@npm:2.1.0" - dependencies: - boolbase: ^1.0.0 - css-select: ^5.1.0 - css-what: ^6.1.0 - domelementtype: ^2.3.0 - domhandler: ^5.0.3 - domutils: ^3.0.1 - checksum: 843d6d479922f28a6c5342c935aff1347491156814de63c585a6eb73baf7bb4185c1b4383a1195dca0f12e3946d737c7763bcef0b9544c515d905c5c44c5308b - languageName: node - linkType: hard - -"cheerio@npm:^1.0.0-rc.3": - version: 1.0.0-rc.12 - resolution: "cheerio@npm:1.0.0-rc.12" - dependencies: - cheerio-select: ^2.1.0 - dom-serializer: ^2.0.0 - domhandler: ^5.0.3 - domutils: ^3.0.1 - htmlparser2: ^8.0.1 - parse5: ^7.0.0 - parse5-htmlparser2-tree-adapter: ^7.0.0 - checksum: 5d4c1b7a53cf22d3a2eddc0aff70cf23cbb30d01a4c79013e703a012475c02461aa1fcd99127e8d83a02216386ed6942b2c8103845fd0812300dd199e6e7e054 - languageName: node - linkType: hard - "child_process@npm:~1.0.2": version: 1.0.2 resolution: "child_process@npm:1.0.2" @@ -5162,13 +5157,6 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^2.0.0": - version: 2.0.0 - resolution: "ci-info@npm:2.0.0" - checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 - languageName: node - linkType: hard - "ci-info@npm:^3.2.0": version: 3.9.0 resolution: "ci-info@npm:3.9.0" @@ -5351,7 +5339,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.11.0, commander@npm:^2.19.0, commander@npm:^2.20.0": +"commander@npm:^2.11.0, commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -5474,15 +5462,6 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:^3.0.4": - version: 3.1.5 - resolution: "cross-fetch@npm:3.1.5" - dependencies: - node-fetch: 2.6.7 - checksum: f6b8c6ee3ef993ace6277fd789c71b6acf1b504fd5f5c7128df4ef2f125a429e29cd62dc8c127523f04a5f2fa4771ed80e3f3d9695617f441425045f505cf3bb - languageName: node - linkType: hard - "cross-spawn@npm:^6.0.5": version: 6.0.5 resolution: "cross-spawn@npm:6.0.5" @@ -5532,19 +5511,6 @@ __metadata: languageName: node linkType: hard -"css-select@npm:^5.1.0": - version: 5.1.0 - resolution: "css-select@npm:5.1.0" - dependencies: - boolbase: ^1.0.0 - css-what: ^6.1.0 - domhandler: ^5.0.2 - domutils: ^3.0.1 - nth-check: ^2.0.1 - checksum: 2772c049b188d3b8a8159907192e926e11824aea525b8282981f72ba3f349cf9ecd523fdf7734875ee2cb772246c22117fc062da105b6d59afe8dcd5c99c9bda - languageName: node - linkType: hard - "css-tree@npm:^2.3.1": version: 2.3.1 resolution: "css-tree@npm:2.3.1" @@ -5565,10 +5531,10 @@ __metadata: languageName: node linkType: hard -"css-what@npm:^6.1.0": - version: 6.1.0 - resolution: "css-what@npm:6.1.0" - checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe +"css.escape@npm:^1.5.1": + version: 1.5.1 + resolution: "css.escape@npm:1.5.1" + checksum: f6d38088d870a961794a2580b2b2af1027731bb43261cfdce14f19238a88664b351cc8978abc20f06cc6bbde725699dec8deb6fe9816b139fc3f2af28719e774 languageName: node linkType: hard @@ -5695,6 +5661,32 @@ __metadata: languageName: node linkType: hard +"deep-equal@npm:^2.0.5": + version: 2.2.2 + resolution: "deep-equal@npm:2.2.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.2 + es-get-iterator: ^1.1.3 + get-intrinsic: ^1.2.1 + is-arguments: ^1.1.1 + is-array-buffer: ^3.0.2 + is-date-object: ^1.0.5 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + isarray: ^2.0.5 + object-is: ^1.1.5 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.0 + side-channel: ^1.0.4 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.9 + checksum: eb61c35157b6ecb96a5359b507b083fbff8ddb4c86a78a781ee38485f77a667465e45d63ee2ebd8a00e86d94c80e499906900cd82c2debb400237e1662cd5397 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -5731,6 +5723,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.0.1": + version: 1.1.1 + resolution: "define-data-property@npm:1.1.1" + dependencies: + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: a29855ad3f0630ea82e3c5012c812efa6ca3078d5c2aa8df06b5f597c1cde6f7254692df41945851d903e05a1668607b6d34e778f402b9ff9ffb38111f1a3f0d + languageName: node + linkType: hard + "define-lazy-prop@npm:^3.0.0": version: 3.0.0 resolution: "define-lazy-prop@npm:3.0.0" @@ -5762,6 +5765,13 @@ __metadata: languageName: node linkType: hard +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 + languageName: node + linkType: hard + "detect-newline@npm:^3.0.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -5799,13 +5809,6 @@ __metadata: languageName: node linkType: hard -"discontinuous-range@npm:1.0.0": - version: 1.0.0 - resolution: "discontinuous-range@npm:1.0.0" - checksum: 8ee88d7082445b6eadc7c03bebe6dc978f96760c45e9f65d16ca66174d9e086a9e3855ee16acf65625e1a07a846a17de674f02a5964a6aebe5963662baf8b5c8 - languageName: node - linkType: hard - "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -5824,6 +5827,13 @@ __metadata: languageName: node linkType: hard +"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": + version: 0.5.16 + resolution: "dom-accessibility-api@npm:0.5.16" + checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 + languageName: node + linkType: hard + "dom-helpers@npm:^5.0.1": version: 5.2.1 resolution: "dom-helpers@npm:5.2.1" @@ -5845,18 +5855,7 @@ __metadata: languageName: node linkType: hard -"dom-serializer@npm:^2.0.0": - version: 2.0.0 - resolution: "dom-serializer@npm:2.0.0" - dependencies: - domelementtype: ^2.3.0 - domhandler: ^5.0.2 - entities: ^4.2.0 - checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 @@ -5881,15 +5880,6 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^5.0.1, domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": - version: 5.0.3 - resolution: "domhandler@npm:5.0.3" - dependencies: - domelementtype: ^2.3.0 - checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c - languageName: node - linkType: hard - "domutils@npm:^2.5.2": version: 2.8.0 resolution: "domutils@npm:2.8.0" @@ -5901,17 +5891,6 @@ __metadata: languageName: node linkType: hard -"domutils@npm:^3.0.1": - version: 3.0.1 - resolution: "domutils@npm:3.0.1" - dependencies: - dom-serializer: ^2.0.0 - domelementtype: ^2.3.0 - domhandler: ^5.0.1 - checksum: 23aa7a840572d395220e173cb6263b0d028596e3950100520870a125af33ff819e6f609e1606d6f7d73bd9e7feb03bb404286e57a39063b5384c62b724d987b3 - languageName: node - linkType: hard - "duplicate-package-checker-webpack-plugin@npm:^3.0.0": version: 3.0.0 resolution: "duplicate-package-checker-webpack-plugin@npm:3.0.0" @@ -5992,7 +5971,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.2.0, entities@npm:^4.3.0, entities@npm:^4.4.0": +"entities@npm:^4.4.0": version: 4.4.0 resolution: "entities@npm:4.4.0" checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 @@ -6015,46 +5994,6 @@ __metadata: languageName: node linkType: hard -"enzyme-shallow-equal@npm:^1.0.0, enzyme-shallow-equal@npm:^1.0.1": - version: 1.0.5 - resolution: "enzyme-shallow-equal@npm:1.0.5" - dependencies: - has: ^1.0.3 - object-is: ^1.1.5 - checksum: e18a728225b3ef501a223608955e2c8e915adf24dfe4d778bdbc89e4ecd80384723e9d44780176be1529f6b642e7837211f502bff89f62833d8f9cae027997e0 - languageName: node - linkType: hard - -"enzyme@npm:^3.7.0": - version: 3.11.0 - resolution: "enzyme@npm:3.11.0" - dependencies: - array.prototype.flat: ^1.2.3 - cheerio: ^1.0.0-rc.3 - enzyme-shallow-equal: ^1.0.1 - function.prototype.name: ^1.1.2 - has: ^1.0.3 - html-element-map: ^1.2.0 - is-boolean-object: ^1.0.1 - is-callable: ^1.1.5 - is-number-object: ^1.0.4 - is-regex: ^1.0.5 - is-string: ^1.0.5 - is-subset: ^0.1.1 - lodash.escape: ^4.0.1 - lodash.isequal: ^4.5.0 - object-inspect: ^1.7.0 - object-is: ^1.0.2 - object.assign: ^4.1.0 - object.entries: ^1.1.1 - object.values: ^1.1.1 - raf: ^3.4.1 - rst-selector-parser: ^2.2.3 - string.prototype.trim: ^1.2.1 - checksum: 69ae80049c3f405122b8e619f1cf8b04f32b3cc2b6134c29ed8c0f05e87a0b15080f1121096ec211954a710f4787300af9157078c863012de87eee16e98e64ea - languageName: node - linkType: hard - "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" @@ -6071,7 +6010,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.20.4": +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.20.4": version: 1.21.2 resolution: "es-abstract@npm:1.21.2" dependencies: @@ -6113,10 +6052,20 @@ __metadata: languageName: node linkType: hard -"es-array-method-boxes-properly@npm:^1.0.0": - version: 1.0.0 - resolution: "es-array-method-boxes-properly@npm:1.0.0" - checksum: 2537fcd1cecf187083890bc6f5236d3a26bf39237433587e5bf63392e88faae929dbba78ff0120681a3f6f81c23fe3816122982c160d63b38c95c830b633b826 +"es-get-iterator@npm:^1.1.3": + version: 1.1.3 + resolution: "es-get-iterator@npm:1.1.3" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + has-symbols: ^1.0.3 + is-arguments: ^1.1.1 + is-map: ^2.0.2 + is-set: ^2.0.2 + is-string: ^1.0.7 + isarray: ^2.0.5 + stop-iteration-iterator: ^1.0.0 + checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d languageName: node linkType: hard @@ -6724,7 +6673,7 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.0, function.prototype.name@npm:^1.1.2, function.prototype.name@npm:^1.1.5": +"function.prototype.name@npm:^1.1.5": version: 1.1.5 resolution: "function.prototype.name@npm:1.1.5" dependencies: @@ -6786,7 +6735,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1": version: 1.2.1 resolution: "get-intrinsic@npm:1.2.1" dependencies: @@ -7039,7 +6988,7 @@ __metadata: languageName: node linkType: hard -"has@npm:^1.0.0, has@npm:^1.0.3": +"has@npm:^1.0.3": version: 1.0.3 resolution: "has@npm:1.0.3" dependencies: @@ -7073,16 +7022,6 @@ __metadata: languageName: node linkType: hard -"html-element-map@npm:^1.2.0": - version: 1.3.1 - resolution: "html-element-map@npm:1.3.1" - dependencies: - array.prototype.filter: ^1.0.0 - call-bind: ^1.0.2 - checksum: 7408da008d37bfa76b597e298ae0ed530258065deb29fbd73d40f7cbd123b654d1022a7a8cfbe713e57d90c5bef844399f5c8a46cde7d55c91d305024c921d08 - languageName: node - linkType: hard - "html-encoding-sniffer@npm:^3.0.0": version: 3.0.0 resolution: "html-encoding-sniffer@npm:3.0.0" @@ -7118,18 +7057,6 @@ __metadata: languageName: node linkType: hard -"htmlparser2@npm:^8.0.1": - version: 8.0.1 - resolution: "htmlparser2@npm:8.0.1" - dependencies: - domelementtype: ^2.3.0 - domhandler: ^5.0.2 - domutils: ^3.0.1 - entities: ^4.3.0 - checksum: 06d5c71e8313597722bc429ae2a7a8333d77bd3ab07ccb916628384b37332027b047f8619448d8f4a3312b6609c6ea3302a4e77435d859e9e686999e6699ca39 - languageName: node - linkType: hard - "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -7335,7 +7262,7 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.5": +"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": version: 1.0.5 resolution: "internal-slot@npm:1.0.5" dependencies: @@ -7360,6 +7287,16 @@ __metadata: languageName: node linkType: hard +"is-arguments@npm:^1.1.1": + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 + languageName: node + linkType: hard + "is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": version: 3.0.2 resolution: "is-array-buffer@npm:3.0.2" @@ -7387,7 +7324,7 @@ __metadata: languageName: node linkType: hard -"is-boolean-object@npm:^1.0.1, is-boolean-object@npm:^1.1.0": +"is-boolean-object@npm:^1.1.0": version: 1.1.2 resolution: "is-boolean-object@npm:1.1.2" dependencies: @@ -7397,24 +7334,13 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.1.5, is-callable@npm:^1.2.7": +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac languageName: node linkType: hard -"is-ci@npm:^2.0.0": - version: 2.0.0 - resolution: "is-ci@npm:2.0.0" - dependencies: - ci-info: ^2.0.0 - bin: - is-ci: bin.js - checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 - languageName: node - linkType: hard - "is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.9.0": version: 2.13.0 resolution: "is-core-module@npm:2.13.0" @@ -7424,7 +7350,7 @@ __metadata: languageName: node linkType: hard -"is-date-object@npm:^1.0.1": +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" dependencies: @@ -7513,6 +7439,13 @@ __metadata: languageName: node linkType: hard +"is-map@npm:^2.0.1, is-map@npm:^2.0.2": + version: 2.0.2 + resolution: "is-map@npm:2.0.2" + checksum: ace3d0ecd667bbdefdb1852de601268f67f2db725624b1958f279316e13fecb8fa7df91fd60f690d7417b4ec180712f5a7ee967008e27c65cfd475cc84337728 + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -7573,7 +7506,7 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:^1.0.5, is-regex@npm:^1.1.4": +"is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" dependencies: @@ -7583,6 +7516,13 @@ __metadata: languageName: node linkType: hard +"is-set@npm:^2.0.1, is-set@npm:^2.0.2": + version: 2.0.2 + resolution: "is-set@npm:2.0.2" + checksum: b64343faf45e9387b97a6fd32be632ee7b269bd8183701f3b3f5b71a7cf00d04450ed8669d0bd08753e08b968beda96fca73a10fd0ff56a32603f64deba55a57 + languageName: node + linkType: hard + "is-shared-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "is-shared-array-buffer@npm:1.0.2" @@ -7615,13 +7555,6 @@ __metadata: languageName: node linkType: hard -"is-subset@npm:^0.1.1": - version: 0.1.1 - resolution: "is-subset@npm:0.1.1" - checksum: 97b8d7852af165269b7495095691a6ce6cf20bdfa1f846f97b4560ee190069686107af4e277fbd93aa0845c4d5db704391460ff6e9014aeb73264ba87893df44 - languageName: node - linkType: hard - "is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": version: 1.0.4 resolution: "is-symbol@npm:1.0.4" @@ -7644,6 +7577,13 @@ __metadata: languageName: node linkType: hard +"is-weakmap@npm:^2.0.1": + version: 2.0.1 + resolution: "is-weakmap@npm:2.0.1" + checksum: 1222bb7e90c32bdb949226e66d26cb7bce12e1e28e3e1b40bfa6b390ba3e08192a8664a703dff2a00a84825f4e022f9cd58c4599ff9981ab72b1d69479f4f7f6 + languageName: node + linkType: hard + "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -7653,6 +7593,16 @@ __metadata: languageName: node linkType: hard +"is-weakset@npm:^2.0.1": + version: 2.0.2 + resolution: "is-weakset@npm:2.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 5d8698d1fa599a0635d7ca85be9c26d547b317ed8fd83fc75f03efbe75d50001b5eececb1e9971de85fcde84f69ae6f8346bc92d20d55d46201d328e4c74a367 + languageName: node + linkType: hard + "is-wsl@npm:^2.2.0": version: 2.2.0 resolution: "is-wsl@npm:2.2.0" @@ -7662,6 +7612,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -7933,16 +7890,6 @@ __metadata: languageName: node linkType: hard -"jest-fetch-mock@npm:^3.0.0": - version: 3.0.3 - resolution: "jest-fetch-mock@npm:3.0.3" - dependencies: - cross-fetch: ^3.0.4 - promise-polyfill: ^8.1.3 - checksum: fb052f7e0ef1c8192a9c15efdd1b18d281ab68fc6b1648b30bff8880fe24418bdf12190ea79b1996932dc15417c3c01f5b2d77ef7104a7e7943e7cbe8d61071d - languageName: node - linkType: hard - "jest-get-type@npm:^29.6.3": version: 29.6.3 resolution: "jest-get-type@npm:29.6.3" @@ -8168,20 +8115,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^26.1.0": - version: 26.6.2 - resolution: "jest-util@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - "@types/node": "*" - chalk: ^4.0.0 - graceful-fs: ^4.2.4 - is-ci: ^2.0.0 - micromatch: ^4.0.2 - checksum: 3c6a5fba05c4c6892cd3a9f66196ea8867087b77a5aa1a3f6cd349c785c3f1ca24abfd454664983aed1a165cab7846688e44fe8630652d666ba326b08625bc3d - languageName: node - linkType: hard - "jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" @@ -8430,7 +8363,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:2.x, json5@npm:^2.1.2, json5@npm:^2.2.3": +"json5@npm:^2.1.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -8752,20 +8685,6 @@ __metadata: languageName: node linkType: hard -"lodash.flattendeep@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.flattendeep@npm:4.4.0" - checksum: 8521c919acac3d4bcf0aaf040c1ca9cb35d6c617e2d72e9b4d51c9a58b4366622cd6077441a18be626c3f7b28227502b3bf042903d447b056ee7e0b11d45c722 - languageName: node - linkType: hard - -"lodash.isequal@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.isequal@npm:4.5.0" - checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 - languageName: node - linkType: hard - "lodash.memoize@npm:4.x": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -8794,7 +8713,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.x, lodash@npm:^4.11.2, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0": +"lodash@npm:^4.11.2, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -8856,6 +8775,15 @@ __metadata: languageName: node linkType: hard +"lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" + bin: + lz-string: bin/bin.js + checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d + languageName: node + linkType: hard + "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -8989,7 +8917,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": +"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" dependencies: @@ -9029,7 +8957,7 @@ __metadata: languageName: node linkType: hard -"min-indent@npm:^1.0.1": +"min-indent@npm:^1.0.0, min-indent@npm:^1.0.1": version: 1.0.1 resolution: "min-indent@npm:1.0.1" checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 @@ -9176,15 +9104,6 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:1.x, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f - languageName: node - linkType: hard - "mkdirp@npm:^0.5.1": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" @@ -9196,10 +9115,12 @@ __metadata: languageName: node linkType: hard -"moo@npm:^0.5.0": - version: 0.5.1 - resolution: "moo@npm:0.5.1" - checksum: 2d8c013f1f9aad8e5c7a9d4a03dbb4eecd91b9fe5e9446fbc7561fd38d4d161c742434acff385722542fe7b360fce9c586da62442379e62e4158ad49c7e1a6b7 +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f languageName: node linkType: hard @@ -9288,23 +9209,6 @@ __metadata: languageName: node linkType: hard -"nearley@npm:^2.7.10": - version: 2.20.1 - resolution: "nearley@npm:2.20.1" - dependencies: - commander: ^2.19.0 - moo: ^0.5.0 - railroad-diagrams: ^1.0.0 - randexp: 0.4.6 - bin: - nearley-railroad: bin/nearley-railroad.js - nearley-test: bin/nearley-test.js - nearley-unparse: bin/nearley-unparse.js - nearleyc: bin/nearleyc.js - checksum: 42c2c330c13c7991b48221c5df00f4352c2f8851636ae4d1f8ca3c8e193fc1b7668c78011d1cad88cca4c1c4dc087425420629c19cc286d7598ec15533aaef26 - languageName: node - linkType: hard - "negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" @@ -9326,7 +9230,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:2.6.7, node-fetch@npm:^2.6.0": +"node-fetch@npm:^2.6.0": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" dependencies: @@ -9468,15 +9372,6 @@ __metadata: languageName: node linkType: hard -"nth-check@npm:^2.0.1": - version: 2.1.1 - resolution: "nth-check@npm:2.1.1" - dependencies: - boolbase: ^1.0.0 - checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 - languageName: node - linkType: hard - "nwsapi@npm:^2.2.2": version: 2.2.7 resolution: "nwsapi@npm:2.2.7" @@ -9491,14 +9386,14 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.3, object-inspect@npm:^1.7.0, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": version: 1.12.3 resolution: "object-inspect@npm:1.12.3" checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db languageName: node linkType: hard -"object-is@npm:^1.0.2, object-is@npm:^1.1.5": +"object-is@npm:^1.1.5": version: 1.1.5 resolution: "object-is@npm:1.1.5" dependencies: @@ -9515,7 +9410,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": +"object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -9527,7 +9422,7 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.1, object.entries@npm:^1.1.6": +"object.entries@npm:^1.1.6": version: 1.1.6 resolution: "object.entries@npm:1.1.6" dependencies: @@ -9538,7 +9433,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.0, object.fromentries@npm:^2.0.6": +"object.fromentries@npm:^2.0.6": version: 2.0.6 resolution: "object.fromentries@npm:2.0.6" dependencies: @@ -9559,7 +9454,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.1, object.values@npm:^1.1.6": +"object.values@npm:^1.1.6": version: 1.1.6 resolution: "object.values@npm:1.1.6" dependencies: @@ -9729,16 +9624,6 @@ __metadata: languageName: node linkType: hard -"parse5-htmlparser2-tree-adapter@npm:^7.0.0": - version: 7.0.0 - resolution: "parse5-htmlparser2-tree-adapter@npm:7.0.0" - dependencies: - domhandler: ^5.0.2 - parse5: ^7.0.0 - checksum: fc5d01e07733142a1baf81de5c2a9c41426c04b7ab29dd218acb80cd34a63177c90aff4a4aee66cf9f1d0aeecff1389adb7452ad6f8af0a5888e3e9ad6ef733d - languageName: node - linkType: hard - "parse5@npm:^7.0.0, parse5@npm:^7.1.1": version: 7.1.2 resolution: "parse5@npm:7.1.2" @@ -9839,13 +9724,6 @@ __metadata: languageName: node linkType: hard -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 - languageName: node - linkType: hard - "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -10021,6 +9899,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^27.0.2": + version: 27.5.1 + resolution: "pretty-format@npm:27.5.1" + dependencies: + ansi-regex: ^5.0.1 + ansi-styles: ^5.0.0 + react-is: ^17.0.1 + checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 + languageName: node + linkType: hard + "pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" @@ -10039,13 +9928,6 @@ __metadata: languageName: node linkType: hard -"promise-polyfill@npm:^8.1.3": - version: 8.2.3 - resolution: "promise-polyfill@npm:8.2.3" - checksum: f320278bab8b8ce32f0e2f377d75aabe35c90a79f92b3e001db084d635da1fb8740ba8a26b5c1c2b4cdca5a4c988f9b6b3eb30f0b151d0362d3d9c1675024a8f - languageName: node - linkType: hard - "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -10066,7 +9948,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.6.2, prop-types@npm:^15.7.0, prop-types@npm:^15.8.1": +"prop-types@npm:^15.6.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -10119,32 +10001,6 @@ __metadata: languageName: node linkType: hard -"raf@npm:^3.4.1": - version: 3.4.1 - resolution: "raf@npm:3.4.1" - dependencies: - performance-now: ^2.1.0 - checksum: 50ba284e481c8185dbcf45fc4618ba3aec580bb50c9121385d5698cb6012fe516d2015b1df6dd407a7b7c58d44be8086108236affbce1861edd6b44637c8cd52 - languageName: node - linkType: hard - -"railroad-diagrams@npm:^1.0.0": - version: 1.0.0 - resolution: "railroad-diagrams@npm:1.0.0" - checksum: 9e312af352b5ed89c2118edc0c06cef2cc039681817f65266719606e4e91ff6ae5374c707cc9033fe29a82c2703edf3c63471664f97f0167c85daf6f93496319 - languageName: node - linkType: hard - -"randexp@npm:0.4.6": - version: 0.4.6 - resolution: "randexp@npm:0.4.6" - dependencies: - discontinuous-range: 1.0.0 - ret: ~0.1.10 - checksum: 3c0d440a3f89d6d36844aa4dd57b5cdb0cab938a41956a16da743d3a3578ab32538fc41c16cc0984b6938f2ae4cbc0216967e9829e52191f70e32690d8e3445d - languageName: node - linkType: hard - "randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" @@ -10166,13 +10022,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.2.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e - languageName: node - linkType: hard - "react-is@npm:^16.13.1, react-is@npm:^16.7.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -10180,36 +10029,17 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^17.0.0, react-is@npm:^17.0.2": +"react-is@npm:^17.0.1": version: 17.0.2 resolution: "react-is@npm:17.0.2" checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 languageName: node linkType: hard -"react-shallow-renderer@npm:^16.13.1": - version: 16.15.0 - resolution: "react-shallow-renderer@npm:16.15.0" - dependencies: - object-assign: ^4.1.1 - react-is: ^16.12.0 || ^17.0.0 || ^18.0.0 - peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 6052c7e3e9627485120ebd8257f128aad8f56386fe8d42374b7743eac1be457c33506d153c7886b4e32923c0c352d402ab805ef9ca02dbcd8393b2bdeb6e5af8 - languageName: node - linkType: hard - -"react-test-renderer@npm:^17.0.0": - version: 17.0.2 - resolution: "react-test-renderer@npm:17.0.2" - dependencies: - object-assign: ^4.1.1 - react-is: ^17.0.2 - react-shallow-renderer: ^16.13.1 - scheduler: ^0.20.2 - peerDependencies: - react: 17.0.2 - checksum: e6b5c6ed2a0bde2c34f1ab9523ff9bc4c141a271daf730d6b852374e83acc0155d58ab71a318251e953ebfa65b8bebb9c5dce3eba1ccfcbef7cc4e1e8261c401 +"react-is@npm:^18.0.0, react-is@npm:^18.2.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e languageName: node linkType: hard @@ -10314,6 +10144,16 @@ __metadata: languageName: node linkType: hard +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: ^4.0.0 + strip-indent: ^3.0.0 + checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + "redent@npm:^4.0.0": version: 4.0.0 resolution: "redent@npm:4.0.0" @@ -10367,6 +10207,17 @@ __metadata: languageName: node linkType: hard +"regexp.prototype.flags@npm:^1.5.0": + version: 1.5.1 + resolution: "regexp.prototype.flags@npm:1.5.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + set-function-name: ^2.0.0 + checksum: 869edff00288442f8d7fa4c9327f91d85f3b3acf8cbbef9ea7a220345cf23e9241b6def9263d2c1ebcf3a316b0aa52ad26a43a84aa02baca3381717b3e307f47 + languageName: node + linkType: hard + "regexpu-core@npm:^5.3.1": version: 5.3.2 resolution: "regexpu-core@npm:5.3.2" @@ -10420,6 +10271,13 @@ __metadata: languageName: node linkType: hard +"resize-observer-polyfill@npm:^1.5.1": + version: 1.5.1 + resolution: "resize-observer-polyfill@npm:1.5.1" + checksum: 57e7f79489867b00ba43c9c051524a5c8f162a61d5547e99333549afc23e15c44fd43f2f318ea0261ea98c0eb3158cca261e6f48d66e1ed1cd1f340a43977094 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -10512,13 +10370,6 @@ __metadata: languageName: node linkType: hard -"ret@npm:~0.1.10": - version: 0.1.15 - resolution: "ret@npm:0.1.15" - checksum: d76a9159eb8c946586567bd934358dfc08a36367b3257f7a3d7255fdd7b56597235af23c6afa0d7f0254159e8051f93c918809962ebd6df24ca2a83dbe4d4151 - languageName: node - linkType: hard - "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -10562,16 +10413,6 @@ __metadata: languageName: node linkType: hard -"rst-selector-parser@npm:^2.2.3": - version: 2.2.3 - resolution: "rst-selector-parser@npm:2.2.3" - dependencies: - lodash.flattendeep: ^4.4.0 - nearley: ^2.7.10 - checksum: fbfb2f6a7d4c9b3e013ef555ac06e5dba444e0d37dc959b94c507b6c34093ef10fe98141338d9cac58e5ae0f9453a5ef7f85af3d5e6386b237c1b3552debe4a0 - languageName: node - linkType: hard - "run-applescript@npm:^5.0.0": version: 5.0.0 resolution: "run-applescript@npm:5.0.0" @@ -10663,16 +10504,6 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.20.2": - version: 0.20.2 - resolution: "scheduler@npm:0.20.2" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: c4b35cf967c8f0d3e65753252d0f260271f81a81e427241295c5a7b783abf4ea9e905f22f815ab66676f5313be0a25f47be582254db8f9241b259213e999b8fc - languageName: node - linkType: hard - "scheduler@npm:^0.23.0": version: 0.23.0 resolution: "scheduler@npm:0.23.0" @@ -10725,23 +10556,23 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.5.4 - resolution: "semver@npm:7.5.4" - dependencies: - lru-cache: ^6.0.0 +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" bin: semver: bin/semver.js - checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 languageName: node linkType: hard -"semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" +"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard @@ -10761,6 +10592,17 @@ __metadata: languageName: node linkType: hard +"set-function-name@npm:^2.0.0": + version: 2.0.1 + resolution: "set-function-name@npm:2.0.1" + dependencies: + define-data-property: ^1.0.1 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.0 + checksum: 4975d17d90c40168eee2c7c9c59d023429f0a1690a89d75656306481ece0c3c1fb1ebcc0150ea546d1913e35fbd037bace91372c69e543e51fc5d1f31a9fa126 + languageName: node + linkType: hard + "shallow-clone@npm:^3.0.0": version: 3.0.1 resolution: "shallow-clone@npm:3.0.1" @@ -11039,6 +10881,15 @@ __metadata: languageName: node linkType: hard +"stop-iteration-iterator@npm:^1.0.0": + version: 1.0.0 + resolution: "stop-iteration-iterator@npm:1.0.0" + dependencies: + internal-slot: ^1.0.4 + checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 + languageName: node + linkType: hard + "string-argv@npm:^0.3.1": version: 0.3.2 resolution: "string-argv@npm:0.3.2" @@ -11105,7 +10956,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.1, string.prototype.trim@npm:^1.2.7": +"string.prototype.trim@npm:^1.2.7": version: 1.2.7 resolution: "string.prototype.trim@npm:1.2.7" dependencies: @@ -11193,6 +11044,15 @@ __metadata: languageName: node linkType: hard +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: ^1.0.0 + checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 + languageName: node + linkType: hard + "strip-indent@npm:^4.0.0": version: 4.0.0 resolution: "strip-indent@npm:4.0.0" @@ -11594,29 +11454,6 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:^26.0.0": - version: 26.5.6 - resolution: "ts-jest@npm:26.5.6" - dependencies: - bs-logger: 0.x - buffer-from: 1.x - fast-json-stable-stringify: 2.x - jest-util: ^26.1.0 - json5: 2.x - lodash: 4.x - make-error: 1.x - mkdirp: 1.x - semver: 7.x - yargs-parser: 20.x - peerDependencies: - jest: ">=26 <27" - typescript: ">=3.8 <5.0" - bin: - ts-jest: cli.js - checksum: 6f65ad4fe67ab3f0fd4c7f9954acbee863af05b2b3f88dd0f490bbcdc58002960fac908b2cb9f009ec14da6fe13cb00a39e291260d6e555abe72448d1c0a017f - languageName: node - linkType: hard - "ts-jest@npm:^29.1.0": version: 29.1.1 resolution: "ts-jest@npm:29.1.1" @@ -12193,6 +12030,18 @@ __metadata: languageName: node linkType: hard +"which-collection@npm:^1.0.1": + version: 1.0.1 + resolution: "which-collection@npm:1.0.1" + dependencies: + is-map: ^2.0.1 + is-set: ^2.0.1 + is-weakmap: ^2.0.1 + is-weakset: ^2.0.1 + checksum: c815bbd163107ef9cb84f135e6f34453eaf4cca994e7ba85ddb0d27cea724c623fae2a473ceccfd5549c53cc65a5d82692de418166df3f858e1e5dc60818581c + languageName: node + linkType: hard + "which-module@npm:^2.0.0": version: 2.0.1 resolution: "which-module@npm:2.0.1" @@ -12461,13 +12310,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:20.x, yargs-parser@npm:^20.2.9": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 - languageName: node - linkType: hard - "yargs-parser@npm:^18.1.2": version: 18.1.3 resolution: "yargs-parser@npm:18.1.3" @@ -12478,6 +12320,13 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^20.2.9": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + "yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" From 97ba7f14acfa2a85f9ee2a48ed4b159f226e996d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= <fcollonval@gmail.com> Date: Mon, 23 Oct 2023 16:30:38 +0200 Subject: [PATCH 20/24] Update checkout action --- .github/workflows/build.yml | 6 +++--- .github/workflows/check-release.yml | 2 +- .github/workflows/update-integration-tests.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 36a7fead1..660aba381 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: python-version: ['3.8', '3.9', '3.10'] steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Base Setup uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 @@ -107,7 +107,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Base Setup uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 @@ -164,6 +164,6 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - uses: jupyterlab/maintainer-tools/.github/actions/check-links@v1 diff --git a/.github/workflows/check-release.yml b/.github/workflows/check-release.yml index b16e196c4..783070374 100644 --- a/.github/workflows/check-release.yml +++ b/.github/workflows/check-release.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Base Setup uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - name: Check Release diff --git a/.github/workflows/update-integration-tests.yml b/.github/workflows/update-integration-tests.yml index 92fc6db56..2bbce8374 100644 --- a/.github/workflows/update-integration-tests.yml +++ b/.github/workflows/update-integration-tests.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }} From 4577c58fd30c426755922e715e448d0b190382d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= <fcollonval@gmail.com> Date: Mon, 23 Oct 2023 16:31:54 +0200 Subject: [PATCH 21/24] Upload extension only for python 3.10 --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 660aba381..575abe18c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -62,6 +62,7 @@ jobs: - name: Upload extension packages uses: actions/upload-artifact@v3 + if: ${{ matrix.python-version == '3.10' }} with: name: extension-artifacts path: dist/jupyterlab_git* From c3835522c60bc787cf8b96162961626403eeaf90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= <fcollonval@gmail.com> Date: Mon, 23 Oct 2023 17:19:42 +0200 Subject: [PATCH 22/24] Fix integration test utils --- ui-tests/tests/add-tag.spec.ts | 4 ++-- ui-tests/tests/commit-diff.spec.ts | 4 ++-- ui-tests/tests/file-selection.spec.ts | 8 ++++---- ui-tests/tests/git-stash.spec.ts | 4 ++-- ui-tests/tests/image-diff.spec.ts | 4 ++-- ui-tests/tests/merge-commit.spec.ts | 4 ++-- ui-tests/tests/merge-conflict.spec.ts | 4 ++-- ui-tests/tests/rebase.spec.ts | 4 ++-- ui-tests/tests/utils.ts | 11 ++++------- 9 files changed, 22 insertions(+), 25 deletions(-) diff --git a/ui-tests/tests/add-tag.spec.ts b/ui-tests/tests/add-tag.spec.ts index dce44754f..10ed85b7c 100644 --- a/ui-tests/tests/add-tag.spec.ts +++ b/ui-tests/tests/add-tag.spec.ts @@ -6,9 +6,9 @@ const baseRepositoryPath = 'test-repository-dirty.tar.gz'; test.use({ autoGoto: false, mockSettings: galata.DEFAULT_SETTINGS }); test.describe('Add tag', () => { - test.beforeEach(async ({ baseURL, page, tmpPath }) => { + test.beforeEach(async ({ page, request, tmpPath }) => { await extractFile( - baseURL, + request, path.resolve(__dirname, 'data', baseRepositoryPath), path.join(tmpPath, 'repository.tar.gz') ); diff --git a/ui-tests/tests/commit-diff.spec.ts b/ui-tests/tests/commit-diff.spec.ts index e65dddc24..2bc95cc55 100644 --- a/ui-tests/tests/commit-diff.spec.ts +++ b/ui-tests/tests/commit-diff.spec.ts @@ -6,9 +6,9 @@ const baseRepositoryPath = 'test-repository.tar.gz'; test.use({ autoGoto: false }); test.describe('Commits diff', () => { - test.beforeEach(async ({ baseURL, page, tmpPath }) => { + test.beforeEach(async ({ page, request, tmpPath }) => { await extractFile( - baseURL, + request, path.resolve(__dirname, 'data', baseRepositoryPath), path.join(tmpPath, 'repository.tar.gz') ); diff --git a/ui-tests/tests/file-selection.spec.ts b/ui-tests/tests/file-selection.spec.ts index a9ae7dd08..9cafc61e6 100644 --- a/ui-tests/tests/file-selection.spec.ts +++ b/ui-tests/tests/file-selection.spec.ts @@ -6,9 +6,9 @@ const baseRepositoryPath = 'test-repository-dirty.tar.gz'; test.use({ autoGoto: false }); test.describe('File selection for normal staging', () => { - test.beforeEach(async ({ baseURL, page, tmpPath }) => { + test.beforeEach(async ({ page, request, tmpPath }) => { await extractFile( - baseURL, + request, path.resolve(__dirname, 'data', baseRepositoryPath), path.join(tmpPath, 'repository.tar.gz') ); @@ -51,9 +51,9 @@ test.describe('File selection for normal staging', () => { }); test.describe('File selection for simple staging', () => { - test.beforeEach(async ({ baseURL, page, tmpPath }) => { + test.beforeEach(async ({ page, request, tmpPath }) => { await extractFile( - baseURL, + request, path.resolve(__dirname, 'data', baseRepositoryPath), path.join(tmpPath, 'repository.tar.gz') ); diff --git a/ui-tests/tests/git-stash.spec.ts b/ui-tests/tests/git-stash.spec.ts index 43820727a..589d8853c 100644 --- a/ui-tests/tests/git-stash.spec.ts +++ b/ui-tests/tests/git-stash.spec.ts @@ -6,9 +6,9 @@ const baseRepositoryPath = 'test-repository-stash.tar.gz'; test.use({ autoGoto: false }); test.describe('Git Stash Commands', () => { - test.beforeEach(async ({ baseURL, page, tmpPath }) => { + test.beforeEach(async ({ page, request, tmpPath }) => { await extractFile( - baseURL, + request, path.resolve(__dirname, 'data', baseRepositoryPath), path.join(tmpPath, 'repository.tar.gz') ); diff --git a/ui-tests/tests/image-diff.spec.ts b/ui-tests/tests/image-diff.spec.ts index 1570806f8..0523b8ace 100644 --- a/ui-tests/tests/image-diff.spec.ts +++ b/ui-tests/tests/image-diff.spec.ts @@ -6,9 +6,9 @@ const baseRepositoryPath = 'test-repository.tar.gz'; test.use({ autoGoto: false }); test.describe('Image diff', () => { - test.beforeEach(async ({ baseURL, page, tmpPath }) => { + test.beforeEach(async ({ page, request, tmpPath }) => { await extractFile( - baseURL, + request, path.resolve(__dirname, 'data', baseRepositoryPath), path.join(tmpPath, 'repository.tar.gz') ); diff --git a/ui-tests/tests/merge-commit.spec.ts b/ui-tests/tests/merge-commit.spec.ts index b9b970dd3..8a10f3857 100644 --- a/ui-tests/tests/merge-commit.spec.ts +++ b/ui-tests/tests/merge-commit.spec.ts @@ -6,9 +6,9 @@ const baseRepositoryPath = 'test-repository-merge-commits.tar.gz'; test.use({ autoGoto: false, mockSettings: galata.DEFAULT_SETTINGS }); test.describe('Merge commit tests', () => { - test.beforeEach(async ({ baseURL, page, tmpPath }) => { + test.beforeEach(async ({ page, request, tmpPath }) => { await extractFile( - baseURL, + request, path.resolve(__dirname, 'data', baseRepositoryPath), path.join(tmpPath, 'repository.tar.gz') ); diff --git a/ui-tests/tests/merge-conflict.spec.ts b/ui-tests/tests/merge-conflict.spec.ts index b508ff5ba..53c6dd72e 100644 --- a/ui-tests/tests/merge-conflict.spec.ts +++ b/ui-tests/tests/merge-conflict.spec.ts @@ -6,9 +6,9 @@ const baseRepositoryPath = 'test-repository.tar.gz'; test.use({ autoGoto: false, mockSettings: galata.DEFAULT_SETTINGS }); test.describe('Merge conflict tests', () => { - test.beforeEach(async ({ baseURL, page, tmpPath }) => { + test.beforeEach(async ({ page, request, tmpPath }) => { await extractFile( - baseURL, + request, path.resolve(__dirname, 'data', baseRepositoryPath), path.join(tmpPath, 'repository.tar.gz') ); diff --git a/ui-tests/tests/rebase.spec.ts b/ui-tests/tests/rebase.spec.ts index af22c08c7..9e8a48fe4 100644 --- a/ui-tests/tests/rebase.spec.ts +++ b/ui-tests/tests/rebase.spec.ts @@ -6,9 +6,9 @@ const baseRepositoryPath = 'test-repository.tar.gz'; test.use({ autoGoto: false, mockSettings: galata.DEFAULT_SETTINGS }); test.describe('Rebase', () => { - test.beforeEach(async ({ baseURL, page, tmpPath }) => { + test.beforeEach(async ({ page, request, tmpPath }) => { await extractFile( - baseURL, + request, path.resolve(__dirname, 'data', baseRepositoryPath), path.join(tmpPath, 'repository.tar.gz') ); diff --git a/ui-tests/tests/utils.ts b/ui-tests/tests/utils.ts index 1f5932932..faaee9105 100644 --- a/ui-tests/tests/utils.ts +++ b/ui-tests/tests/utils.ts @@ -1,18 +1,15 @@ import { galata } from '@jupyterlab/galata'; -import fetch from 'node-fetch'; -import path from 'path'; +import { APIRequestContext } from '@playwright/test'; export async function extractFile( - baseURL: string, + request: APIRequestContext, filePath: string, destination: string ): Promise<void> { - const contents = galata.newContentsHelper(baseURL); + const contents = galata.newContentsHelper(request); await contents.uploadFile(filePath, destination); - await fetch(`${contents.baseURL}/extract-archive/${destination}`, { - method: 'GET' - }); + await request.get(`/extract-archive/${destination}`); await contents.deleteFile(destination); } From cd8f265925fbd1f93a84e7c84efce1bcc11a768f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= <fcollonval@gmail.com> Date: Tue, 24 Oct 2023 13:56:44 +0200 Subject: [PATCH 23/24] Fix integration tests --- ui-tests/tests/commit-diff.spec.ts | 4 +- ui-tests/tests/git-stash.spec.ts | 98 +++++++++--------- .../jpeg-diff-linux.png | Bin 83345 -> 82791 bytes .../png-diff-linux.png | Bin 47704 -> 46062 bytes ui-tests/tests/rebase.spec.ts | 4 +- 5 files changed, 54 insertions(+), 52 deletions(-) diff --git a/ui-tests/tests/commit-diff.spec.ts b/ui-tests/tests/commit-diff.spec.ts index 2bc95cc55..85af6f302 100644 --- a/ui-tests/tests/commit-diff.spec.ts +++ b/ui-tests/tests/commit-diff.spec.ts @@ -39,10 +39,10 @@ test.describe('Commits diff', () => { test('should display diff from single file history', async ({ page }) => { await page.sidebar.openTab('filebrowser'); - await page.click('#filebrowser >> text=example.ipynb', { + await page.getByText('example.ipynb').click({ button: 'right' }); - await page.hover('ul[role="menu"] >> text=Git'); + await page.getByRole('menu').getByText('Git').hover(); await page.click('#jp-contextmenu-git >> text=History'); await page.waitForSelector('#jp-git-sessions >> ol >> text=example.ipynb'); diff --git a/ui-tests/tests/git-stash.spec.ts b/ui-tests/tests/git-stash.spec.ts index 589d8853c..12ada7d6e 100644 --- a/ui-tests/tests/git-stash.spec.ts +++ b/ui-tests/tests/git-stash.spec.ts @@ -24,15 +24,15 @@ test.describe('Git Stash Commands', () => { }); test('should show the current stash list of two items', async ({ page }) => { - const stashButton = await page.getByRole('button', { + const stashButton = page.getByRole('button', { name: 'Stash latest changes' }); - const numberOfStashes = await page.locator('[data-test-id="num-stashes"]'); + const numberOfStashes = page.locator('[data-test-id="num-stashes"]'); await page.getByText('Stash', { exact: true }).click(); expect.soft(stashButton).toBeTruthy(); - await expect(await numberOfStashes.innerText()).toBe('(2)'); + await expect(numberOfStashes).toHaveText('(2)'); }); test('should drop a single stash entry when `stash drop` button is clicked', async ({ @@ -41,13 +41,14 @@ test.describe('Git Stash Commands', () => { // Open the stash list await page.getByText('Stash', { exact: true }).click(); // Hover on the stash list - const stashSection = await page.getByText('Stash(2)'); + const stashSection = page.getByText('Stash(2)'); await stashSection.hover(); // Click drop stash on the first item - const dropFirstStashBtn = await page - .locator('span') - .filter({ hasText: 'notebook stash (on master)' }) + const dropFirstStashBtn = page + .locator('div') + .filter({ hasText: /^notebook stash \(on master\)$/ }) + .last() .getByRole('button', { name: 'Drop stash entry' }); await dropFirstStashBtn.click(); @@ -59,9 +60,9 @@ test.describe('Git Stash Commands', () => { }); // Now there should be only one stash - const numberOfStashes = await page.locator('[data-test-id="num-stashes"]'); + const numberOfStashes = page.locator('[data-test-id="num-stashes"]'); - await expect(await numberOfStashes.innerText()).toBe('(1)'); + await expect(numberOfStashes).toHaveText('(1)'); }); test('should clear all the stashes when `stash clear` button is clicked', async ({ @@ -70,7 +71,7 @@ test.describe('Git Stash Commands', () => { // Open the stash list await page.getByText('Stash', { exact: true }).click(); // Hover on the stash list - const stashSection = await page.getByText('Stash(2)'); + const stashSection = page.getByText('Stash(2)'); await stashSection.hover(); // Click clear all stash button @@ -87,9 +88,9 @@ test.describe('Git Stash Commands', () => { }); // Now there should be only one stash - const numberOfStashes = await page.locator('[data-test-id="num-stashes"]'); + const numberOfStashes = page.locator('[data-test-id="num-stashes"]'); - await expect(await numberOfStashes.innerText()).toBe('(0)'); + await expect(numberOfStashes).toHaveText('(0)'); }); test('should add a stash when the `stash changes` button is clicked', async ({ @@ -112,9 +113,9 @@ test.describe('Git Stash Commands', () => { // Should have the old tetx - const oldText = await page.locator('text="This is some dirty changes"'); - await expect.soft(await oldText.count()).toBe(1); - const stashButton = await page.getByRole('button', { + const oldText = page.locator('text="This is some dirty changes"'); + await expect.soft(oldText).toHaveCount(1); + const stashButton = page.getByRole('button', { name: 'Stash latest changes' }); await stashButton.click(); @@ -133,16 +134,16 @@ test.describe('Git Stash Commands', () => { }); // See if the nStashes becomes (3) - const numberOfStashes = await page.locator('[data-test-id="num-stashes"]'); + const numberOfStashes = page.locator('[data-test-id="num-stashes"]'); - await expect.soft(await numberOfStashes.innerText()).toBe('(3)'); + await expect.soft(numberOfStashes).toHaveText('(3)'); // check that our stash message showed up properly await expect - .soft(await page.getByText('some stash message (on master)')) - .toBeTruthy(); + .soft(page.getByText('some stash message (on master)')) + .toBeVisible(); await page.waitForTimeout(100); // Check that the stash removed the old text disappears - await expect(await oldText.count()).toBe(0); + await expect(oldText).toHaveCount(0); }); test('should apply a stash entry when the `stash apply` button is clicked (does not remove stash entry from list)', async ({ @@ -162,21 +163,23 @@ test.describe('Git Stash Commands', () => { // Show the stash entries and hover on the stash entry await page.getByText('Stash(2)').click(); await page - .locator('span') - .filter({ hasText: 'stashy stash (on master)' }) + .locator('div') + .filter({ hasText: /^stashy stash \(on master\)$/ }) + .last() .hover(); - const applyStashBtn = await page - .locator('span') - .filter({ hasText: 'stashy stash (on master)' }) + const applyStashBtn = page + .locator('div') + .filter({ hasText: /^stashy stash \(on master\)$/ }) + .last() .getByRole('button', { name: 'Apply stash entry' }); await applyStashBtn.click(); // Check that the stash applies await expect - .soft(await page.getByText('console.log("dirty changes");')) - .toBeTruthy(); + .soft(page.getByText('console.log("dirty changes");')) + .toHaveCount(1); // open the second file has changes applied await page.getByRole('tab', { name: 'File Browser' }).click(); @@ -187,12 +190,12 @@ test.describe('Git Stash Commands', () => { .dblclick(); await expect - .soft(await page.getByText('This is some dirty changes')) - .toBeTruthy(); + .soft(page.getByText('This is some dirty changes')) + .toHaveCount(1); // See if the nStashes remains the same - const numberOfStashes = await page.locator('[data-test-id="num-stashes"]'); - await expect(await numberOfStashes.innerText()).toBe('(2)'); + const numberOfStashes = page.locator('[data-test-id="num-stashes"]'); + await expect(numberOfStashes).toHaveText('(2)'); }); test('should pop a stash entry when the `stash pop` button is clicked (apply stash then remove from list)', async ({ @@ -219,16 +222,17 @@ test.describe('Git Stash Commands', () => { await page.getByText('Stash', { exact: true }).click(); await page - .locator('span') - .filter({ hasText: 'stashy stash (on master)' }) + .locator('div') + .filter({ hasText: /^stashy stash \(on master\)$/ }) + .last() .hover(); - const popStashBtn = await page - .locator('span') - .filter({ hasText: 'stashy stash (on master)' }) - .getByRole('button', { name: 'Pop stash entry' }); - - await popStashBtn.click(); + await page + .locator('div') + .filter({ hasText: /^stashy stash \(on master\)$/ }) + .last() + .getByRole('button', { name: 'Pop stash entry' }) + .click(); // Wait for the number of stashes to change await page.waitForFunction(() => { @@ -237,11 +241,9 @@ test.describe('Git Stash Commands', () => { }); await page.waitForTimeout(100); // Check that the stash applies - const firstStashFileText = await page - .locator('pre') - .filter({ hasText: 'console.log("dirty changes");' }); + const firstStashFileText = page.getByText('console.log("dirty changes");'); - await expect.soft(await firstStashFileText.count()).toBe(1); + await expect.soft(firstStashFileText).toHaveCount(1); // open the second file has changes applied await page.getByRole('tab', { name: 'File Browser' }).click(); @@ -254,11 +256,9 @@ test.describe('Git Stash Commands', () => { // Wait for revertFile to finish await page.waitForTimeout(100); - const secondStashFileText = await page - .locator('pre') - .filter({ hasText: 'This is some dirty changes' }); + const secondStashFileText = page.getByText('This is some dirty changes'); - await expect.soft(await secondStashFileText.count()).toBe(1); + await expect.soft(secondStashFileText).toHaveCount(1); // See if the nStashes remains the same @@ -267,7 +267,7 @@ test.describe('Git Stash Commands', () => { return element && !(element.textContent ?? '').includes('(2)'); }); - const numberOfStashes = await page.locator('[data-test-id="num-stashes"]'); - await expect(await numberOfStashes.innerText()).toBe('(1)'); + const numberOfStashes = page.locator('[data-test-id="num-stashes"]'); + await expect(numberOfStashes).toHaveText('(1)'); }); }); diff --git a/ui-tests/tests/image-diff.spec.ts-snapshots/jpeg-diff-linux.png b/ui-tests/tests/image-diff.spec.ts-snapshots/jpeg-diff-linux.png index dfeac572a43d665c4bd60b83bc892ae7746358db..53be74083cd1e692d5bce43f302cac7b508d0ae5 100644 GIT binary patch literal 82791 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 HQQ-dqRM9M- literal 83345 zcmbrl1yCJP*DXkbg#-&E!QI{6gS!T~5Zv8eg1dWghv4pR!QEXi?r?El=lkdV^Qva* zy{Vciq;KEu)2C1Gz4qQ~uMSm^6G!@p{SgWZ3Q1BzL<tJ&eFLz4{{as8i#1-b1pIsF zpd|hss$v}X5DJPAN>W5f#Wnq8&COM1?&baxlEKE3dh&$-o)k5y3T}x*RPl5FvW@1~ z>a%&(7xVgh)B5?WW!2aQ)zaeG`LI^Xza7Gh?*m9<ymZK)GKUNso}PBdp`nR{zVv%e z9J_hqr>1(Gae*@(&cK--XOSw9dj_M{kx<$la>);Vgda9)HePR@#(fDt^bnGc5c*2x zi5bkA$4q%{XrRFeVct0MUv&upTc{nG>p4H(M}i6-wXcak_+9t}O3}U76haLMmlUZ7 z1_FM1vI+m~0S<=IQ$Y1C|Ibc8MoQ0P-%|l(JcH%5H{)%KQYuT!*M|5vxx~i0%N-Pc zlU0HBt;;c<&hwKG8?mKtFP}-?TEYq|D$e;{UiN-OJReizFEzd7?(Vg!ZkXxq>ZsYR zd1R$ua~xlXV?HeW;B93&<r!T<QNDfs*m0kQa=&@yLix-L!6{nMo*O9in7`WkTDtVM zT46&J?04}(wW8YhRJ%d^l6Z|H-N0WJ1u^Lq)zlaf9Z$7oa%)50+CgvTZML$>63}|8 zB_oA{ui@_uX^b*dnqK`LGu4HMK5#WtJp{$7-g5ucO>%$W_<U6p3WM1OH!A3C#m7*D zw=eP&+B~tZXG_@4bN`E@Ia@YN^2C`GN&9d_quhv-WUrf}7&WzI&!K(wkpy|x-mdb3 z8PUK(aF#so$oA*nwL`Ur`dZIpYh=~msadFl8<p)nFF(DC0+XkaYdhP*oYNwyratp> znQ+JQlS8SR7{>ls>GIRN)XGSK>guSGdaXG}C8H}3aK~w8aN^~Nka^~I@}9a;o3|O( zZ@k{l^tYs@?LM?;BIAxT*&iePYYMe#o0yt>hnHJb5{Q}?Td*V6ywacExKY%QcU{Jc zff#PGH<t`)-MBW3e>tpK(TGhNZ-`_5P5Uz-O=gvqJ2Xok(}TYsE<3wA6ypw;w6y_0 z12ksD6wAxam&h2;kv%&m{e*n&Jum6$$c?;Sd($=phj|TYv}@AB&q6}D*eTVt;jTQL zC?Y81PwMZC&dQ#e7FALp>`dcJtlrA$>hiKB#AuaARO#@2yezOBe6!Bpm$=o)(s?_S zXM(|sHA?Maupe@LVMGqkC{_I_-*rI<IcL@u5HXR3AL586GZp#kc3OLvk}Aw_meadB z9spk$<2Yjqad9Iso=I2{94&L*-lsCqel?+>x~B~u|LuJ9sx6}ZO?Y@Mek#?G(@IXR z!zI0@TvYvt`!XD2^2|_(%1!_NSB2Q8!8f;*-#64J8P4Aa#TgH`%v^)12KW8lY<BG3 z`4zx8JA-U*51*l;=y|Z-cxAf5TnBAVt4*(}(HqVwD_l3*_~y~6p_!jYM!|BCZb?CM z%-TF6vhHj(y@79&f&=SZu`$(KztH+j+Pp)8MnUQ96diW25gk^%vC0Ne#av3V^DE+} zbk<_!%IKWT0hf@1Z5;4<Z155E*AsV77N}1f&F|g<UI+89OOj`NAam35RZfd3_nRtc z$&?1>Lj&*a1^(u?|3MPYj!jv*jA%9>HqV$gp@AgDwm)K?el0(EX%9)u>PlIm$eyO& zz$hCddfP!)KjOKJyf%6EDmgP?SHLmjR2;nIm@yl+5ZoysVkJwzgcRu`-i|&s9~E>O zu*dj5jtJIl@QKZ9icdUxE-O2PqzO27ok9d!<EP6-O}r`~Gqt<nnsBT59U5s?!{y+6 z9H}*F^Uy^%gosX`u%{-JS^CGBHDj`!df^ll)$J<o519BO!+h}wa>%#$Yt75M1$`t{ zkyn>`-rv&)QKA-Rr*sc{is!0Y>-@wy&bsnvm`x;TgQ>@!^-Qq4*TpI@vE_w}U^Rkv zCv}q|30OAAkGbhqFCXBRt=RYb29@TghkaP&bCXCjQ}`0CgZ+6Hth00LGqCKY66))& z#;a++%ZdT#^>#AXxEc9yf978w4T&_iaU<(oY774mA3A&R!8sw}@>rH<s$?QF#d(Oi z6V#a)@ta$zM>u5RzPdKwZ#jz2^D6#0mNfKH?h{mFVT7@g3g-io>}sbq3wC0d8IvMz zNyV0nrV9%%<F6?_u!~Z&`XkM8;}&EEQbS)EvKvEqgUz-QHex%({H9*_tFVF|U%fHV zx+s3>lF2aT_`Y|XRsY2^6(3_PqKOjJ(z0e&@9Yw<{lj0V6wkI3x_-#Ftwtcjhd@Bc z+!00qpUqERe*YTW9{k~wy@t|k@z+YD%Sw~Osn`(@olJCO;nZ}0OB*rpp-kHzX^+lo zwb>c^bgkjt%#n1_SXA#G@#yXt5{W!)F4#eF(IVUXLeH6=;fzb7DVif$RJ^9KE$(T- z%6O$FYjWA@xDf?;xAg%1CDBGn<^I>py^`^<!m{kum_e*c(bXR&Q#&rL6L(AWdMx9* zppGXgHGf!1vRHe_?)9?H{)#x~r8S(pj@QN^8?}M<wrt)9JRG^bOr@x{8Up12l)R*< zygLcDKnsUhJbER9G)cfchTH_u&u!6Tllv9wD<gh(E{(FCuZIvVrnQeWPTSUGX78fT zx+Bd!(JU%=2GXegjLsYJ9icKnWMba^qim&fUR3vT_lMn?zh&yDxXGVoHMwO1m)!X~ zzWq~gPnNMj*?<Tn;R01fkI~Vy4Qsur-voKrQ?-y1tGX}jv9`Cih~4YEUI}BF6pi*{ ztpeW*l&is^bWo>RF3uF+`8A%_>dzmLYOKZMn;wr`7Uvl%!2y55UB&yWYopH|!oa zmGHKXOMDHLtIET^U>6z;EM@)Ti3&0k*>C0yNCwtff(CMY9$BkFph|LHwy?rgIJu7G zP*9QHP0i&jZUynn9&6isBoUdY!bd^a)~v;z`t!8_wO=_K?9&=6-Q(gM+jU%_5|O#J zh5lD~Wa??HDV<lp-yIue1D^Z(IPy>hu_SPDdtdm000Q<Fem`#U)b+WWvn+Ek&)f$V zyYhPFjl-;V+?s+1e<`GVMr?K#bD3s^@}3r6l8ot6O&Q)21DfmN%~`p<)9=@o5P&De zTw47VgB-O7?P-%4^WPrL<CC$Y|LU4seo;2aTYaOqwA>$H%c`a{qnz^Yc)soW43(MA zl5s4CxT8>zy2Af+;&&OY42VwP%@Z05p85|K5dA$LXK*mF4<^FudM)Yb^EzgFieq$> zCQ=9f#t=FuCd|xR?F=Y}KHI(0F1K2Z>a+*RJ6!z>z-b?)OH8f6`w50g6PaQ^ivq1g z3rK_EpsPyj{B-ktU96jabNUFV;&F`w(JNk6TM}><tbOjJ!U$qEZod_Ql}*Kquz7Z7 z^P><5WalNVLO71p`pJ<Gz#3eZg-fMnqA1mc_qN9r$0=E;!JR_UV~5)lYU4)TRYbUz zC3#gPSOS&G@Gp5MTI(acl4jC0pUKftwAg(u&=P670b~GNsH<CwWlfG^r$_i<?WCmd z;pv^O_4#HXA3P`Mr*v{}_sKmbF!z0Ad*;#lXSWR^xmmW&^S%DW-fcJ2BT__=Rj1KQ z;Zue6xh;G>!SjT^N?c#?QgeVSjoRO|Pts<`4VU3m=&riMFvx1D8jnNn{JgOvH%+Fm zoIXk7+W0GV(2-L88GN;c&PDNwPtg}f+C-=9IH5xCczLaum2*kpE#sl*MlOGILuLME ziOlhR2ZP<_YW}2MV{xpJz>27m<i>T%Xi;N-F>Tspp%f;r9sS$Fw%O2|*BwTFBExs= z&~X0`gj4H>aAU8Kr1U2eVLw;<amW3(myOyZuk4$Zmc(BIOq9Rii{!X1p0ueY^+lKU z`2UWJzPHX|3~Hr_goZnVx4|0{sZ^}pFFgLh;#ONwoM0Ucoi@X!OE6n9S2jksc}kL+ z(Ae<##A-LGdT4dtVe9ei^2GZ|#G^5Cko{cON0bd%_RbXM*Rq;D4%W-X{fvZ$I%aOx zfM#KRzK-)sPd##j&KKA3hKpRsH%hw42SBieV5Kb6IhU2IetS0fJh&kNNhz`C((+_{ z!-I5gWW6ML7?)p+Xno}8k@OJ78DO*-Smp2L!<kE8>6+bhI4HK}vDi01hCVKyP#S2n z>eQ0IiBR{{Ph1-MEP&U0(N7YZ!4lxa;Ui<94GmSG`SD%Tv(17oB3tb3xMGbOL7t%l zQME(Rq-_m;7N$<c{U9-^r2dMqj-tz`jIcA_y52AzN@oC&Jh(Zp*f7|T>8hi~<7W<l z1>E1t&T-^s<8Ja41ERup2jASI+>%<50em1`PZ{mgp~5h2f3l`CBWI*aN$MeQdygpN zriGQoUAjWG1`?50B%#j04xSS_StUAa`$15a-(G{H>A}HGP~c_K?tln<<7&<d;3)5v zZN<){;@Z4Tdq9NZvL%p{54$AARM~R&<9u8_Y)EWGi^c9w;UPz3B@SpoWLd#~4hzaO zP-|{PY|p~jIm;N0DGi!QQJ&cM=<M=rikli4P_E-g`DG?QMrP>=vs4=WZy|<V5@MQ2 zn*kgHt;$>+DCqAa>K(92a<<}m)*J}18ZHox)bLOWsI}j?j0!eaao-&YnMeP&TgHWn zMmE^4r0=Bwamn8<=s<zO(iYzaGwRgpK64VM6q{ulNZRP8yY3X%8WZykYs~k&f}N*8 z(=uIEf`#;1{#3)s`DtPvquLndBYE~VTtki2J1rwy#K)&3308Ci%hQ22Wdc+X8Df3= zn_qhb#bXUg^}5GZv9_|r%J^xa<-G$K0@}itLGK6F(ztb7e>pTtYHD)Gx*@@k!`by) zEaXfVFWxSa|3OimPFN7UH{8SZtYCL5;Q|}Q(~bZ|2@0tGw|HUE`^i}&Si*Vv=4mXf z+*P!Z5*uAp1t=65#fpzXu#eZPd$l1Km;22>pESH^)7*sh-OjEwW}Thw&y&-txH4EZ z6K}Sk6U2`57C!GB3m1*anK{si|FM8d;UJBYm)ozVuZ*$#te1bY`u$}g&SKF4Ja)EO zRtR=(jMm0-^ky=8-}##x!HS?!#bX5R6ufg5LE<l;2+ow;kvOB;;EPvkA|p#B`B85= zM?DY}T=S^@jp7(P<ui_~jQp>9VC<rXbF#mtoARIbQ4cM)t7UnHY)s#8HflOo^LM7C ziIH7~&t9I;RqigNIYSMf&bKaD8=6RRK?<V4TP5*}s#*gqJa_LVSB>^E8QAS=DtueX z3mK`HBV1VIE>_Q8pp$OX&Yn!q?Ic1Bblk{Fqi`vD23Ppv-E-x*h9VJ^={dz9TCVA3 zHoP<h9#S;-%#|UUN^w}<^0ml1oewZ=@Wx1qCbOQD2bJgMyW4dvbIS_m3|2apcLi^m zxulxg?|yhQ6^xYw6NJ$<kC;{z;Eo;qLy`)Eg|y1!hRY*0ymtCQ*V&WS<E$;U2s{pz zAXq+QJy<-Ktyq$Rjov?8%0SU%A~}!>C)Mdv*a(CxSqpxXtK&EQrJ`dh>np9D`p(?2 zxP8^6D4a+DB1J(hJf`QB1hY;cN*gN!EmumqdFxj<PJg+y44R;UoxBC4Mfhmdg{u|1 zRv;mq7|)U{Zj1%$FheynuC8BR+bBGce_5ww?AB^r+$hfBAm8wwV{;Q^M0S^r)y}{k zjb$g-?a8!o(B_e5LlDTwOwOxv=1Z1dR>nNrE`G8<KP&&aqjD;}oVMK)z(8LdM1z*3 zW7^|jQ9PcLpx%4yr4UtYsSoM(SqfJB<y$ghvV&)=|3=_4rBoIn#PaIOb(swD8ew}# z`T}7N-qlpX><~$<husU9S6%<!KduDTLqYXY)H)XiDstWkLY7czuo<_=Zx!WYFAPy0 zB-c%`=V@uqp29P9WCJZaLO}f5_w*|SkHhU9OqTkjESVY6YPuU<7B@8r5$y*0S+zO? z3g`~6o{2nyrlqC@d4G_~6~k@P1<c!nvSW!H8#PK+)x;e1NFtkWO(Q{mal#0=_!0BP z1($|=fET8q{Fq)_72OQcbx~N+nv{4IUy5jTVaE0cujRc)^$Om;A4ZF~`D%vPY|iOR z!WZpxHAXf1aQy=&@<aF1Y4%+)mVz<*JEgPVeMnhvqkNyNOOBxgO{P6gNKEsup1Sfk zGba*Xr*&{b)3JNg1$6o+E#hpse$E=F*g5kc$b588F6eYWJWqLt>*~#6v=WBZLK!;M zDBtB-99L%|&$ltH<73D5^W<^N7!>wfvWYx4glcNHZ0Jg2W4)rTc@<K7?|A9q2~aAW zmsyC0$zV&5{XZmqqhS<=mY7Hs$C5hDZ)I)HY@olcr>MRpepv3ZadBtAX@Q(kQdfyF zo*-3D%|EbR-nw^rl}+~n-n_O!)d;PRLJCXMi5#y`LI?L7&uL;gbVK;-a{jp51X9*Z z1kFYpexg_)?T9*df}QGd9`vJ4eDZIH^^u=hIwE4ScrNl%c9mo@A1+LE+`eY*ePQIK zjER<~RPzR`_<IE0K3U%-#9tf%s60ryV(D8mCLFF1nB6Zg>V_l)OY752TnYi>O(%Lc zY}r-VgO)@}p|raCUC|+&XRJl8K>w`{Lg>cVodY7foc?j$WWR_S{cKG~Z6vFT+${#p z5v4Q_xos3<oS(p`m)cHgPHGDx_q^eDPNY^#8k@JamJ8kLJ<*bz=U`^x4+@Rln$@H= z{Xw1NT@w{H?+o?ozWIUR*_EmKwWBR75xR?HhMa|UGRxIR;M*HS`CqPdwKUV@a^-sV zJK?*z3QQd7rMD{bk`t2S@`>U6tm5Kq55UT-rj+fzNjM>;g-e-LIbJRec`mnDt@2R? z>d2)28ao7%7vwDIBzP^92id!y8zqjzbfN{%FPkMa_nOLLmwhKCbs!J!bU7?eBoG~_ zJ}fCSJ1===Z@a%8p6RgeY)PzWq#vk7rz~clZ;wVUr;bCeAqLWV2xMdBXS#5Y*6{>c ze~%lr@qcrNUd^+=+8toNaXKO<k^(C%IeM7-^_f{d)$VbvtYkDIdh4h!$7{UJuf}pS z2WiE&#qcaW#Sc`VpPeWTU9e$&jAe@RTOu-waCsrvKhgN?!5;nC<{|dU1+F|vts*m8 zDh|M(N_^ho0Y80+sCFgGlaP@-Px)!pMLf!az7yv=*YkUX^|wnW=(}!H0fP1BE%RJY z8Ih+4VrcPF3oaEiV`opxPA}rs!L+eJvV&P_Roe9EXl?QQ%Fw6I)$MT`_a8|6cXB`> z4Wx;6nJ*w9xV26^^45CFC9m2Dbj&XCST?0I<Lx5@Ze1){X?z~9sc}D!=DG9CXWf`7 z7e|Wrjokj^93H4KNoiFcPq&g2!lx2E$agTn(ee=lIM#0wxeV6;K{D&Tuq+A?KvT)h ztQf3lTx84b6*kW=C5CO@i+tDL*yw^1S`##6Hq-?GKcre$7rcq!l;WT|ZEtPIQBGip z1Lg9!MkVEv*OBAR!6&e`XqKO?^w0stVpMb&&vfvzfw41RM{4OtyIq%)FSynkbu+K@ zH85{PNLL?~B`f1x`-pL8>EXoFk;Ef&@gt>g&yB#SL*-oh!|L9Nmpx9}nf5XLafHeK zyJ34jVV@=GixfuS*7W&R4yz}6CK4TlbO!Zir|n+mKM4Xwvz_{BM5_(+*H)<~TD9@t zv;fHz04g#D4v5g^J}cX(`%xG7I_yoFC<2t>YflPhDrYNTP&``G4csbNxl*?I*0Kfs z2}&P~sJAVwJW;9*C*=X0OuCW&{h-N~R5JJC8u#}Vc9rIdY2>o^leAhMth5z{&=8S~ zyD3Osqjl)%Vpd)M{3KQ4Zv`1ASHN<fG4lqmUvj5!&H{O}564xJfrNUB#CGJ6r}K+X z371x2d2difQ3X`ZI)50DF)i{?v^<&Z)?xaI1)?#sqGnWPKJKu6DW52!YV`eE!n9F5 z_Si=a?g`5vBh|`~&~yubBA%RgHZS8*YdxrxmGhi*Skf4<2sWiMC-+p!_c(ohs2h?N z&GIep-P^8&kJ6nrZ}RFXsjq2_Bp7>qCgvX<-veO5FGAb(xXzI$-K)Z=)Y4*b-*L*c zn)#KWl&^!v+Ip)Zlq%vA3RzxZ6jtfFaCsb1ekiZa`+~@}4w}QTfqK-(+mWtSn#R>| z2l>@`Gelgsm7FG6;7qDlz7kw7`so6K?dqiu@X1y?V%K+5v=wjXMNoY=qaqgLcFX`Z z3S5{sg*gl-K3;vP*4x2J?3?^ps+?IZbFb^p?+Lz<WtOLTv&PHi90Q<W(R1Oh=1%`x zb9JF8IdQVP-=oBi;XeOEL%Nh_5p$hoq(r&Y?aY2c^ZDh0{OQcAYG~iFW(O=#Ft$8q zl~n<5AB{Iz1D%tN44+=lcx7q|Dk^{a2iy#mjEye3)jU9f+bdp)h^>Yg2@cD-#9zrQ zl|@!zph3aabI_yWAf;fYBae%g+pV^L`>g-$slmzXd*p1yZeTib_YRIB*UO92`YxTW z;=ImwBRP#raiJ?R4{bu@j0GvdyRDO;Qj0GOih)5XkHoe`>)CV+yvxpNSN1qdm!D9D z>f%Ly%gd-XH@{U~+3_f3lU8PJV{#j35psLIr*_<EKdUv8l&ka&G4i|-<?-;gEmNnj z<BA$ozIN6yY1Y^pJ<|NxH$f56zwh{Y2fV}IV9>)0efeko5rMaUz-p9hem}D`%V*8o zvn0kSwM2eQv>+)Y{ad(HInW(o{m4I(W2wnx;LU&0(!^5#gL2Sg=BEXpKxbD`TPcc) z?Q^6ffHaui!pyf=#veOJcMdjC7!PyIA|4(@?)d5>{U^@%33bC%j<gHnE<Q5;Bc1IR z46C=mS>1;l7Ap6B_e?LTZmtg=p8+~Kd8WUxbzxd*QAF68P7j@!fpWqmEQ2SY;Yt;| z=9u&DQO~&37S=o?=w;$8zdScFp_P2=t0CcWMqWN&yFct(8*;t2@G^mO?sQ4&)xAs^ zohslyJ(+te>KDtzALsX{m1g^T8m$i;vR?3leUA#LI(?tz<zgO>v0NV@e40p`7+`sT z2|r@C`1{0&^Oob=H_qjxZTYvt2!gH&@Wv7^w}_CyVGYAQUXP0K;*JB)MEL37S2&a# zKm3?R(=H+ML~k?kFY_aUxEanh8$a;f9k{eOTQdl0Y6G$T3pZZ3@p4w#F2V(FZFMG7 zYu6g13=W(~KFA^r(sT(vjHBJXc=Hsbed2o$@G8Tc1x%()q7Rcwvk?Ui&>50g9xF7O zRO>PF7sUz?W@xBHkmwn_2J0UCX4SIYQsU*b^@IC_?#-NWUg02GI_~#gfXiro?UXP_ zFsS0lsK>(}JkvVe_8fpqUK`5kJjpXOcn9P^sduwlzpkz0lf(F-SL&{)sX;5v<V@Wp z5)oIoTQgbfUGuq0={2K!!aL1JYbXe8w=b-@Y7?UxKtM{aNI$;(Sv-VOFV%lUrdFGi z9ndl^XFSk<QPd7!Vtq_Fx*{Ps!QEaOM4>x<*u-r|IdLYFS5`3Ao(Yb;K~&8zi2s87 z7wGKxnd)TKUfI!iW-<i=+_C*}8s=v-31=&49|6|{1)FnzpL1|QQAKYL&=|U$H+z^W zCVlmKh9TqY_SeqSifs2@d;fe>G{1&j4>ITGcDpFGN^u0K(x=M<?5j)p+Ck>t(b^s0 zv(KJ>V1E|`-`A#bSM%57`@*L)q*0STF?8!I^3`2gfZGBXAu0<q2l$dx_PsyVBNe=; zPW#Xb1jbaABrUIX!TIS|4}7+E73@no?M;TMbAvS()5Q<HZCIu%)Il)!*LiGN*I5zh zw78j*U}x2$nVk(byo}YyA?`mb-1oN;vz51Efxgoy%-Fp2)3elHhjO|BH&?W&Mm1D` z`#fmYIJ~=#K4k{Zak%wgH((^~%DVhKyxblbih#?u0Ce8CbqPEHHi^Ipd|6vP^lW(| zahIre`FsX__JTZ1u{oP{0awM13%wBC>o#xla(i9563y^6j?@i?I6FP$6aPr}vSD*J z>zsQ5!-Th<?;tdR$vPUpjvGN%*PboY*}BU2fq>5(488yh`o%kT<o-zsXv+-x`Op`V zw|{K!#0b(Q;UQQHAX4X|i0EWUtg`#eiopg1qmaTjxSDmYFrvi}wO`$N&(!r{U44Y0 zk7)<ykIvfl6eBerNT*w!Cj}QHyi)96fiq%ScGv>s!$=>#?Gew-ua8x$p(wWHK$Q!H z*Efe(yU3DmnH#aU5tRo0sr$HRg<yl%&9f?UDQ1+RC#_i9+7U#H$-ZfKP^rzVh9^{@ zIHfu-H6Va8qf|_bSG=qiG>}cCr$<~vi_XOs1cXMQV|Bmn!@v8N=4tI#!y*6oTIW&( zsM2^mtHO~1@7?5+hn|H^uU>uL<+T2}3cZqtNzFvCOF$?<w)F4WR$q=!480Jh-O~gk zsWTLHx^2lMJ<8qj*8?@xNQA)XAm-87xQ<P39>Ap_&FZ*Augq|@@(rd{U1mO=BYC!t zAK2idyuW)rH`}qAYVkBI8jYdhBM@AFdOEF3Vr2nJNCYf&v3VYGsuhsuI5T8V%gXtF zJ9gA#&m7=)Cg*gC^rct_U+rSXmyrP?{mg1&jvmfDp1w7nPu@Du-3Qk08ePK6GRQ;q z%@gPY<xd3CA73XfXp9ON%+nTi#4=oe#6thpGi{eQRASS2=Ey{pdk)V^>?s4}mO%Fs z=<G7n6Gsr{y=xr_R4mN_N^x<DtI3idt9)j-MC)QvsTK%qSfN+9b`z`VCmOv=vvZ=s zV{+NupCscJRn&XJ>Kx;Q{q7-=3*P0~^N04Am!Vo8aWtDut~ibR#A<6rG)h_cbI(Qh zsQ7AS+aF3ymASRfABPt+odUJZk#>lCFtIUz^`CVW&%`ZEN-zzjdHzo=Kx40@lq;pO zK5^o&>}wU1qqT-5b0aMgOyHc!;)LFvf~gqPVy(bC`XL}{>6ERE0zrImpO*)fbB$xo z<=i4iPKRX$=L<Xz(ivO5M!i(~O~nhY$MUGAn>0>p{VgKWjmyR>T*wX6R)M1O+WMJy zjJbs(6^G9=S=J4$ldnVL(Cbmb%9fxQf~|)Mwg)s#vq{~N7nzE-zf!|;l-v=w+*~A( zJH0Y+C@(FKzqRVmFCd%4OTCpo6MNU~J3v~Ll4)C4)Sk^o80~Se*WOuqPdw%1c_!Sg z>j;EgUXyiY7uB4qyr^b6pTHgYYt#={w=r?W0t7O?Tkz|XNO9xma*(K%I0YS_g<Gxp zF<(Qp{epb_Q|$@&#Kw(U$EU-=<gkXTZ|oZo*r!bX+o<hAtpa@6DR1y{nGS!fl#c50 z98C1bevWa1;C}CQ`N*sSu-~wm@&IOXZ{Wz*dkwA)we!ksa~&=OH45s+OcdbPUp#or zzJ(H$EN)@Ol4p%2?rQ$!huLs70{&O2r8|B0wcBP7y!?|mvthNzP@B5*z`e%c2L&<$ z2G8U*zRI-stCcPGj$Er2)E*<Sn^ku(LNzBHy3Wp7j~$S=pY#~c;Td;f?Dnr|lH)!s zYqi?_K<kH7apBw!vsl~mbPb4;yKR;ER{Sckf<XUwZzX)`byCff^9>K%;fQZ!?o=?z z2msQhT2C74$gl^W)_Ia**bh=l1A7Cw1?6n%Dvz!T0)YNu*z@TFfp+!pbV#BBc?ns5 zCS{LaHHtdJiy4(=kC_7+D|JE@LhOO(ts`4Hwhi17Lwlu^1(hZDv4_Gq641oy8sOn~ zs64kG{&6%3j(D9<ue1ao)XXTZRg6Yu-f`E~oDM%wy6=}<$FAuY)#qcCHzoxHhTe-j zO=&O9+oZ~KD5Ra5*D2J|qa@17UeQru`b7X-tlkIqZ9F~fs-K9g?6_XHgaAt{0gx9Z z^5d7TGrfXVS4uNrqi4lh`%jLp*<cz*P`Rr1vP%lkgc(xY0(iFXc}jLGO;cWE{$d6C zQz3eu_QYB6oy!BGO{VJ;qd66|@e@7`FaivGG>{?#2ks@nH$z+CTJYq~QW(EU#x=2< zVOA21Z;p`+0u3LM#vFv;kv;F<FK?$x-yBPSpp7)1I-k23N}xjI@F##|Qf{72_snfE zzqlkY@o9$X&~cT?jy4PY#Xi3!sC_Tdap}}>fz9?|k~6yN*pZ`%w6?w}L7d}M*Vq%W z)dN4fnO#!Dw3C!86sVCi*Q=w`l;f5ZmE=HfUm1R~CF}7yrRr4}SXsZbaQGO)m`Z77 zws)QW-kaMPM)>`+MCG5Y=+@~EOxSKDeEtWS8dn67*xhM|gAWsz=$Lh&VGw9ZTWj2j zBq&F@^oj0xwCMn_#r#ddLJ@J>s_D@Qfv1lO^!5WmfvDhf>FlZS<Qe4JqrY}izcqoO zh2l1S1|oP{WntYKsLDZO69eS`Di8c;bDY{816Q#6xAJ-G%tJTb($0TT9=P5<a;TAk z5CX)fITc7w*mr3%F0L}6+_o-Yrc2FTtrxtd(pDBhDq%vUb^^1vm!Z7&M>tI8Y?ci4 z1|D{)9vg2wR?HdfJepw%w_@}fg)4`Kd#{dy8Z9gek3&S=U)b4diRm&7_Ce;$JVREd z`ri#P^LoE8sujX~9Q&z?zgFkpmo2DDpe#qdK#Igy>1}(xs0eT)iq@|O(s6#!OX})= zl0`<^-*LI?|7`GMZW$1lHuyqn?J@Dcbai9~pEFw=4ONt%H_9K(n(rfp8Yt_9J}r8? zGjHtN%SL>p=v(Om>?CuwAs8?<y1=4&n+*Af4r_r9l@wyH>Ux(M*P6_V0VmVQVUTo& z<X{X<u%5*^IRtu7y-|&d;;-L?-1b*fLU%E(ER;ktpz=IrVhPq+7vDx2QYlDOj@KTm z+nDJ8vLy_ps*B65Yc>MK{0c%YrC;ClgiOYQ-ib_v741u~9n#!=?$pJMq&T)y#}ko@ z6v|rwnmbYG=f(;hd6)p5@WX5mQ@A~})sqs)F5+ZiXHDky`SaUwYN;xH4^r*!2Oj-N zr$Ec!_i=*F{#NuWEl5i1p%WSOe8BzuUD+Etu{E)Qu+<O{kEE6+bR^#FOwAh2PNr}C zDv-mv291FJY9&U^YYtZRlT1Ax6!WVO0gV^I<MIN4%uG}j6*2!(C_&KHD+65B{y^S? z5ym6_?GOPV3uYrYXSvxZR0&7`Rmfj@ERWzwfY?Cn7W+OZb}{qQ#dUV3!=ypEqrLB? zL)9R}rE@T+(_Q0Y*$Ln5pOge>O+$Euula`y0cB1`v^6OySvt^mGEA14t-~ah+`dm6 z=810al{M`2I!gVJDA!*{0cO5wA(d+UR{a*ugMfu2Hn(mMD0TX7aNk~+C2s1}<zB&@ zsio5;JgSlPOH$H`EI{A-ef)R0vgEL}0x+-fXJz*dTm|u=!uL`fU-c2M3)^!e<04@Z zHF<M4UURRfcD|ZsQ+37)`z-sbWp^9U6_ZK=3ts{-N!RTb2$<h?wO7&|cPL$WpgAwk z5zEF@&7)Pes<=ab;~#75tZ1zG7BrwU_%KAn<FLUYxeK({R6z190oY!%a4(&q{(z4s zrmWoy+o(}5CkybhoTqZs&IywV8^31u4R_@S2qn=JXAGXKFkT{&<VyW}>WA@uSQubD zWpX=RqIT*Y`~q+?Pn+LkdB(*1e!4@L(<n8#NY;6y5H95Ix?io5q_iOu-3h7h@!{&^ z87p6m#v%us_NQk|hIB+0O1OtLhkSHo&%UF5Q%lfV!B>%|->$D=OA#LszE@5$veO2{ zJ4G7K&gLwbHhD~QLdsHvO7+|=zrf0l;TD&Pm8xFvD3aXI&4xlf8*LB?x)E3_Du+J_ z03ZTjQ8j=tuMW@o9_+>a%d+lHNTOqOv^WAmfJ*HPdwq<CraZvpTEqoi-Lzqy!B=+- zGZf}GCz1_?iae%-+}-M#W(%aUIRQ;`v@L_}*u#=D&1K1MUy*xPhql5f*+4QVUS==m zaB=dMw-_N~S-dBjKkBUdnE%+CyKUyE-xkegHy<i+m~b6D-~qyg)3{=<CWTU4oe>@g z31a0*8kbDFvm7<mRViZOiDV?`4`XE`lYi!3lIkHy?=f0z6xNXy7M6x`{$T%ZEgKDs z-fE^X-pX45mLdfcOHRlDU3{z_1_z0kn<UY#sNKieMFSR)9;D*q0P-4Ti#R9%d;Mr@ z8_VK=;L!K<bhY}dahAIM`k#goA3Jt<uN=UGdyG&s9o4OJF$JzrQ2GnmOQ4Ra(g3vQ zkeTUjQi9@aor}_nnciX36mD4=d3y_7>&V{JK-h0k6S*BFtSsHL*}2fP$2#to<50fZ zLX7s$UfI03lyB&BHjh)@{P_WaO3Ty3m%rTsiGx-=YXX=)D==A1SWlTnXAi@{>&i9) zM0akK*;PDu)w(p3f=A%5oCJRYAD`P3t4MEog_DMf_pRrX+9)~Eq)!(=CoyNt=rZ@6 zn##<&6}X^uf7-I%zG*ljT5eD_PyA+u0-$RCR#*`BYDvqAQ^=409$sGk?s@BOEr}H< z6$dQZ_!cz_uxQ0UsIBoh!cP1505daG^&I`Rhf_?TBgLM1=NX+J7m|YJUr-Uh?<clQ z146*T=&m!_*9*JIDJ=<am$xe7ubqF%{^1}*a+_KY6NyN~$dr-}s7LLaFul^Qu-O2H z!ZkS6lv7c@zXFYvROu`gs4fyOIZsh|N~B7&YsEBHRu$Leyo~A0Bf|iBTY?QkVR>6( zKq>kqGRx<bFA?MUc?DIWf9mYhe<E+w%j<6YD^DG;0sUd1`ypyz4Sl-D_we?j6~Wgi z)=Mrj30jshkb}N!u>N=K70Ha^@$A7%+XpG+oc8Z-FNy8FVyk-yG7n=itnNtr!il&~ zgG5IxiBQtc!vJzBWoe8|TEqkC<+=6@!Z0)|a8GrK^)a3f9~G4i4j3C}fNrl^dmtc^ zk?}U<Cd%toFq;*T2`wz`hzID>BNmH`$Xk=?H#ri|@1#M3Bmj9~Mq^O`h<dEPmjCPK zAEDPyJd%8b0!Us{Iy1fdTawF<jEJtdkEO{hY<p}9fB@(3i2es`tnZV5Q62fY0p8kd z+(yJ=mU(wr?+oJ>?Bn@f`X|L5GLDrI-Ps#A^$KRaBkuYZKLCKhf%#OOif$Qm=f<rj zH;)!1p&U`flw1J~)8ByfH1?FfheDKjFLVj>(bc0r^)~K$W7Gk^)(%1mE*Xfwoh?*D zZ`8$<<cKT;GVWWAdPGfDzr|(*@Ciel6fvL}1VjM9UJ3J|cCW4~!d!sCVJAWpPtKU1 zHU?;AM$yN($3;Y92IW`E;F_|W@DXp8@N_nff5bdHzu!n^%3fx-C5=_#eW|CX{xhcY zT8Q$CM%+c{W!|L-K)+K112EpYI4}}a<Px>cdwsUcu~IExKm`PofaPJ!&*scqNOW)o z#tJA79QiJb`dHNz6o<xT!V9d>tne<&c2#B9&YNT{ku$I<EhtB)ZxD+E>gFvRH``Q9 zYgi#v`oi#QlRy6y&;NGwkpI8xpF_G-|MR^N<`)rNntw`ZKSIQh#8qGa>pVEvlDayT zHXpJ7I_SQ8M&@Pk;cbWm5MA@kF+@Fd)DnL9PQcC0&6qm=Dvabu=-CN;=u`T?E~{r7 zW2o^>`ZLTH+RW;zjG$l_Bm+qZ^^wrn5_W5v6!`m}=>-T0!!-Qwh1&neiGE)E_+KOV z`+fNDVTJxP?1pcic=Xk#KZ^Ip5^8`@zkaptAfAhYhK8FYc;~Pv%Xp>1YQwJL)n?jr z0}FNBxLV!yvL9oq&5h+-cp#I(K$Yi%y;ub1rI(2;>Z|<F#DvLOi&H{!vO%@_#qF)p z)$S0jMh#54>QntRHoqq)3hzai=x_<)a}{TXob$<|5D0|L#>OTQC!(VA#Q{8SbTnH6 z&WO^k1TS>HvUPWNV=y&Vc|fe4&(~$GtmxR&BCDzx_s7x()43b~VVluN(iRx(qIgY7 zDWdCv;Qsmm=5oCt1W0FUAt9l*=c|!br-h#<%k`fUrDSS8^|<5|76yH#QMH}>p=Nhn z-nhNDCu(FwcHZ$s|MTZhTFr(NivsY@j(>FYgy?WN;j``En$hFRPB}R_<ZuiI<Gzs3 zO<MHK%*^WT?rcUzM$fwx0$i1Kv*x#=SvQi>(mTB<0)~gv1&9RvxQSAts;b}K9wvMy zk8i<WLk0&2b!K@#7KL=(q3zl?-@lyuOavgHL%Ht8il?xcApiLBqpz>;rg`jYZ{+ag z#IQf?>)8akT>9VZ34sYe*iVa9de9RBZ@eyRP8b&RW!;wSEFO23+Mbu9j@)Z5O7uea zL{zl2eIp~`{oxp`0ytduq>xny6eJ`hsJ4gwwEO$}Cixy6uiLL#o>vGos%2dZ3mAad z>mVn%39{~ScyzR_^Y(~AqgDa4SyGg#Kb%1I<;xcZWo3Wb5!#<E35t1Q?<UvQ#>5G{ z`Yv|{|IP4k3=yzm5iv0_=S}1=TPsfY7kW{6JOjWD@V)P7YU1qa?RDFU<dBe+B_ks8 zjfg;;FVpA+p2y(b>57?|84*2w6wi4Zx_|ete*LZF&S$a--fP6EsVS(F#cF@6m4+$6 zEhHp9sA;<u@Z954ws-9A?=zdvQYtAcuVsy;FhSecoI7Zjv2$=-uR2Ur+irc|pU9e+ zkrx;nO=U?H@Og#Z6XNvIe>_LK0lsJQdUS+z9v>ZDTwOhiHG*c%+3M@-Q^t(vD|IF^ z`8@uPjqTMhXg{&n(0=fj1I*FN%Iajb89lgn>y?+EKT|TE{GC*`rn>sUE4_d~*5AJp z5EI~`En2b%A>lZyK2j%!{cLr%yB_1X?)k(}WjaNy?RER3OqB+T!26yEIFk3W54}vQ zIZm%P=<;fWVaL9i-nbfeD_2@x-ek5|(Q8~^E|obDu<z-anRk1ubJNp)OP0nDS9`p` zg9PRYteVSsoxsbDvUTezyK05j5Zi)Q?}|;QteM#%Yymtf7M7&7HNBgg8-7+afk4MZ zhgI#8>+PJHq^zvb>+^$&mk*H}>Uh=%O9s2s(^FcVj&yi@*G(Lqp`}yjvzB9esJ8ZY zjW$;%%?8T{_8O`W{^K!3!cDjHnh(#{6K?lg!4E4NuLA>-I3<;pE^o%We`EhSdOgUF zJ0l?>fze<9@#^~eozc9@{lykoE1Ji8l@o$!c^;tzxQ}ydhS$?wHLxo0-@l(Uuh#<X zxUQk0W#(G|!Jo%R_uSmv@dqyzl>~8t+LcpUttM23`B`KvW|-QgRd9m`<jm;t=J20i zMT+(A4#i7KNNgTV<zXb?cRfE`r!pIT1WbCfdJx}W?$3{twN{Mq{%P>}hWjy{pPygT zVPV>M>i)u*zwK+EQh>C&lM|cEsvUgtPiHL1hEM0yb+ZGwC9AFNdYs4Y`EqaqAUp{O zfO)RIAtNCbR8*X;jMWh$5<BdV>J3C-eZjzpPfivW6NAh0ex#C4qTTvaT0u-n8Pe4y zC?zGuh=~{w6cm@9KHB+u%OIHAeQNWvaX9i3u(ytm4&a`rmzTrVtic7z+T0dt>qe-4 z7sBk58Ss*Et8bMH$4uCfXFeA7pc7}0td+Ti1s3mT*XRkrmCP(H+p=%mJKvTjyaxak zoV>O+J}fM(<zkgD3jh7Dr}NINSQ7CTpH}BnP)$wE{fN%%wqg*A*Bb8!uslpda&cQ5 zZxWs6z;uChGXQwJ9Uf1ojnzw*P%v<CnJh>eNqnzf#zmhSSz+~bu_J@}`b5ys(KYH! zKLZ19w?ozqfCm7e2%~=Ahp@1)$wNorX{_?C7}kTRC@FQj{b0c|Pd8-9wtwXB#xM9^ zZf3w*Y78F)RJOLZRDS%(xPCf1G6(SNzWnTZ<pXx47|G6Hw8``R<*MV1Y#AVu_;(XU zS>DSpX#)dd#3UpSC$$s*jIZ;OKd@4sR<sG`hpMXmidEy~L0)v`*I7UNa8@d+(ENN- zNJO-DWl?ME%1c^Q6f#Itldqu`R6aXD?|wo-OuS8;_#M@Ik==Ur?|23eAUz-=dRH`a zcxKanY<YckwJI+&*xzq=FiB*|j#FJ-4PG5QbddqJ0r!W2f!PFugS&M(k26yA8&ok7 z$>lRghvF&t=8GWQ?l+V`=#t6geejz`MnK@AF|8;mA)=){@tbzw&iH3c0D`)D(o3QV z2O)A<aP^!vZj9r(taf*JJ^dXXZprrgxDf$3qmaD73u~?MnErB|8Q|s+pLUeQ8!`ZK z%F1Y6C_DfJ9d}>x)vh$z8%}g|a#B=P9iYha?D?vuWv4ho46HDDd?=g6e3jA2w^3u3 zv9Yn;y}iqIkMqwsILF>84nWXKNK8~zQQ7s5F+7;ev0SPN%+JsF)|pDq$dI+OV**?= z5{Dyq%5+s4!+0Wdti|b=F>Q<!7a54p-7FKl4&zQ<fQ>Tg^}vwJ{_YF=O0(Etg#!SZ zimK|>oSM$%0FI6ADFB@p8DSc=#??M=-eKY4cAU7lysj~EacG4ysrEvLC3EKKauhZl z59Glp1ce<PnZQ$y!sY4#z;o4x;b`uOe;voV$#<?)ZDwl9PUz_?eY$#>ZD_SRt>s1s z-mhqZ*TtPyH65?H_Qhuz!0GfLXKSNb0$H1zy4KBm-*WTv_^h3N%aD`Hq;%~i>&Pi9 zqkqDn-#u$R?{E$L96(To#bTU2XTH?o#iQf>K&D#y)yKz2EE<0daHaFtjI1mI@_2-< zm!qtI@Z67~bMqi_llpYO9nSD~WTba+Fj(h#8{^>C9qJo{cEp_dULb~c*P$ceBE3M+ zKdGjdNA)f~>v*zmuv!@aqRBmAqzWY}eFFpbfSc*qqJET`)KXUN{qv*L)WU*<mp46_ zz<cq9y6RK4<q|Wy<zg3xj;D};0SSF_cuWlHzZB<(+Rr&KJMffYv9Pe7pElmkuE$Gl zFD0&0KQRRgnO*OXJ>NBU?){A=*>F(}xSm{HJ-N)zV!Tg()t250F38L4^<pCV&;xAb z3Db)HSC)zj2mik$gX&>~ACd{HzW@pGPkkysLapEbcXm4Yzq|?f|0lux-@IT5BnGnE z@<$(g$RtYVyf-xdO)-Gri)50~f6r0C_20bylY27)0Q-MP$p8Da|7V{2znjKSc|PLT zs}$f(NYU-vQJwL}lgv2rj^Olv`M$UQ!2kD)4jiX~yUC!jW1tY+v&iG2v??-D3>73f z-xcNe5b;b(V9yo{I_D&bM0n;Hb|EYpO-c@%(6^$OH$Zfox(;CyKayf_;$~0XSkn4S zA=SXdebl0k!R4cRUxTj!%Pt6A{Bw<PgmX^Yky|Ja>A`!>j~$Yh`N12TFxLhSXL{ z*QsgJOr_W^C+X)fXOaCaq9wJV;CG}NynJh0uC5B$$agAyFQ4FRR%akFF@Sypaw06* z8~E`nn(oU>9)?!b!p?;E-xJ3;T7z2k7%~j^yy_y{$*CpZp%s{@%r+_wz8_o_>%)g| z!H6IRLxdx25CYPj@D=7o;3p$tEa8>kI81IhlShtCT9cF0Q9im*%i|!@_RpkvjyzR7 zTBcrzoVJ@Wc&?I<-ZSS(bq9FPF+V4l{6tCeSYW62pz_3M25h$A$M)Zsf3&@e*jihY zFc+jDlB6ar`hk@<j>z_tawmQHooRQD5XlHNX^D%7vRi~dKAvb&ES{VS2#Gm6ah5Z~ z+0ooeUcqT<_{k?o^?j?bSW(iXdE#>8Qp@C@SqbcVw7y)`TtyRk6>6#leCoLpboydW zrv`2(-ggkuumJRS&{A;kJ8mSu3xBeAs^NGx{@+UHLg%x^N)^QfTYE!6bX0jp6U7H7 zSVVKhf=WB~O$uf=*>ibX`?rV|H39ibJ0fS-ck?b>CqvFW*pYCF+WxfuBV>6>CALFo zaw@~FbZ&5u=I&v1{=NFJk;utwzMvu^%0-l4<Kxyb8Lm&5oxRhD{6E*6W!&iiIC7FV zs9rgRfrZ<IA<aWDWXpzQ-~%bp#~5NIO8L`5HhybOIv~JewlN)bM@95*i4@F-IaFQv z8`nF}oW?O7Ic?hJ&L7)xo-DRlaT;QDxR*aQn*0oxo?Ks#QqB9WbU2xy`up;Zd9#Km z#>0fj-Mie`cL3HLONII?@=_oYhI#qN;NBp)av_5oAp_R1%{!bJDDg(TcI|Kw$yU{h zqFFr<j`SEYZJV`N*#YHFHKAFZX+6l&8J@ZvPBJdW2rGFcR7zE@k2;;NwqY~w_OIzd zAx_3g*WjG2U^W4D9vmJTGa9I#6glJHdUIO3;;<6>Cu_?ZC1TZ?Tgt(^M`9-mr`9`3 zZpL+0C=um-KUFdY;Z@M9P$NZIUtBRy?bR7f9#3v{ZA{=uIykGBdTw(k28aKY%K$A! z=jWD{eUU5`o<0QDo<1Y~uJ9Y#y&{znjKZyqQYn=GK;XKxyp;hRd+?`r?dZxO2@eMn z1mW!te>6nvc61R?`8V5tHwlr!Pxzs-WiqLISf^LL%!KVVg&k4nST}iEw}rDAKCtfd zm_bkRS`(4n9-gh>BN!YIAk}O|_(8ywU#xvP!l<~of{3sy+F2T-Mh+VLD;`~W6RGVV zUTDpFX)Lf7H-fkt2XZUY*fzmN#N2eCT%Kr>7N<L$Xkyv-I3e)K5+;HMS<bYCBZ!B| zbnak|x@w8jmh;7<G@`ply0U*u!Eb84ds3HCw|?36hNIKyyn}Vpw3<h-U{2qG%dVws z%Qkziq<c^4OmH~6ColjnCdP=5UgZE0o797cToeAScGune_8wgVn+}cIh`7mxDva=X zvnc^<>5M*Rb~J@67`YX%RVolv)N9?CciIdR;HxU2sDf4SFpE*aE<06?5JLyvGrF4> z^J{l%dp)9&k;`x$Z<lVmr^i>bU9wbfZI$G4OeuQ1=Vecp2`>nLn^;d9)KE=?tZ%TL zY{{_Q@j@XH$A=JyRKgXBq%+B-h>YoO$E2iSMue(4kPWfzvyBrWH$(m~nUfNmqrt~8 zQom>ZKs~&ODC@$;r!rT<-Mj9AbWUKAr93A)vs+J5x~9YbG}B+geZ6kMcdXF~hSY(% z)p_IdMuPl1=yam&Klyjo@R5_N)p!lErcz-NVD+cc$B)6iJ*Uc7JD)B?zv3gCOsgwn zh7ab}i-><FJj59R^Fz4k?;9Cr%p<2Wk4aR%tCTYFY>0`)#a@0}TN>9U5MaTg*-mkM zJq7(wEkK>XAdSu?n)cJc1`!q(QPi=Xe+70YO%kK1-cW4>G0XF7+Uu{3Q>;Q~xt+X_ zQ7quCj^1i3NS7)Ue;g+bDzlKl^@B-X?uQ*(Rr=w@$C#lI*}wbEJqo1-qfX#rvX7yA zcbYz3?Tu>#maSt4_lrc2oX7+)$Un?YGU#Hci6sr#`7fX%tM}3`Z%j5tMU3f~C2h51 zz+85?{tVw0j>$GrbG2Suvsak;#WAcZ9v}=;XU;+vVYDPt(=leK@Fw;Z#hi?sA#84~ z(gG8l`}gsSwmp)V<uTvsB*tUa-xbb|9@PY7TOi5_{xSc6^4&e`L8Akrv$47U#9_A_ zFK@!3h+=DNfRIYb%9Np<RX)SRdA(#(?Ro0%2r5#;<aW63jTlf+9r-Rsl9s7w-)~=2 zmYtL@f?e@i8J_BH%2K*e!5wnGd(qDojDdfS`#tEAb;6;dc^`ZF^6T?-?L^Nf*-D#` zY3%k~ajo#n9z{dr%4oi6nW~k>%Z#^Ym;GA)v8m4yN?+Rfl|)GE?{(Yy!@{7y=MzO8 z?Z)o-(xKGo-vVZ@mN|G3_Vwmt?}-e-(+4cgy_{o*^u$?<yn_wT9fIkRk8Mf4LQ@}6 zwTbymDNwa@1N*rA2MGfUzV=cGTz$5F+KM)fQWZMw*ooN_Jjf8H4s<}KAbS~QZm|Da zd4Icr$|06|Y9vw*df-TaFcp-s!vOE!SKSg-MWXwrt_{?0yppeVK<9)^gHR7ZpA^|B zRcZAsL$r2`!w;R4i>zE}J0VE|dgd*%>GQGdCw{J^s(!IT4SB=I;y{P%?Gf1qsa$Nd zoWnEv?RgqQV&*XyszD3t3~dU36*dRs{b#cDhccb5ltI4OI<B5k&tTQ|Y72Y6D*rrB z%x8mh#n?iYjl3m^7;=-rhB2*20+*RXM^iR2<fA7}+*l<vvp_a3G{$+Q%7qxEn!92H z*Qt>SJx@<EhxT+**#k{sTnppnnL1FOhnJ;L_jv2sW+6=_F$?PPmv{NMrmpyEDzrb~ zl<>j0&Ax-UKE#!;ryKnRP7SgXjQkz$O*;+YvwwKwk_?>(hyp|=?(n|PSIq|}b`Zcc zygwuhM8U>4pf&sbD|#wdw}EBCvod=f(_|$IOO>9W)cO0}I}<u3D%)?L|8zrDA;*cu zr#8D8g7Q#5(y)yqT=irp5RW*-nJOrjLdjE7!03GI**&GF`;m8!9#Ij?6Bze?>$?!4 zH)N<KS05qApbg_B{cJOyoR7HB`02(Fi2_F*XZ~J0V7DCdEBV0w(8e7WS?CYzck%y0 z)j5U7)xB-Ju^Zc-*tYF7Y;4<hGI5%wv27cTCUzU!Xl#G;9{dl!>zcEfgT2?R{j9a_ z`+j~~(d*?HKn^s$F$}^j3Nc8AvI~bwU|{#vRi>S>nemVvp^3?2D*x*oVN5d-sqf*b zO1p#GdTLrwFnV&&9(VPJQYCe<eqOCz2HjgrkbY637<=29`CspfAT5wgNrPm)7iy1+ zuU||IFp89zQjqS_ns<4BO*^7NfH`4fg}>0`;7XK1S3Y5UOulDb_gGi{<O5m>HDoFJ z<rCNP1TZmo<y+$qNLl1PH*8pn@GHi!d<iIyp3@q}qn)6j!i5d^?H5D2KK88IKFc(I zy{4zfU&_Tl{Xi^`o?Xq}`U=!6*#1&6&TfguuKD}WM_JElr`y=G7Re<}E0f|3ofd(h z-f(+}Ooo)c7k9~}$~WhEg``7!U--C$DZiNC8q-Z`I7G}epaV(GE`Ofi;4DcFN^a=; z4t_d03aD*(fDj^|A~kqjoC><NnI~1fFqPh;83~zW&sdLf3}DJxIcLx9Vy%kq_P%|| znx_j&;nxagM1|jbG`^ZaR47WGk3QpFpq=QFEt%D0aRpU8>8iz^mIVO51CYjy0|RrD z8;Zb(ORPn3(FWw_9sRLYOZsur16Qi=<ykQSk6lJ(LmVMa7lnaXP<dHrYD4*xLJlK5 zg;QEO<MO~hEBB~BgL|)PF`TW2vu#BK#63f<bo%F%EMC<ceI9RBA>2cf{@Bi8=c<=e zP&ElZQ9D$xDe^kuWF;pqj(hCJwxus9iTo!O)l+>7J$zX4BMGgjUA#J?8M6EsnKmmd zv0ObYwP=N^=Hd5p$j8R)S&vy<iZF{TE9)6uwT5DRXv;+;#Iq!|IP8>xFl`KUG0Osg zpdLr+l`O)hesd_rjLWo1x5W6BfE{8tp*5*j%Piq{3Ao!A7w^NvE~<Ef+YMoM<rBih zTApb4a2^snK{<?we=<CSgen*^(R%V*19$6!5e@FQNf6S2!s79VbB3_nem<FODhX|9 z6?o^Ksabhep02RD2L8qUeO=rVF<u2C1|UTdfW0_e@KOT{e;U7<2`w46=J?^&y9970 zNijg6;X4O@z)k#@4_G(nP97_G2ze{;^jlMu9j*WD^ut{g8AAPd%y61ftrJ^3Ba5Jo zA!B*L;**t#4r~e63>)JpcH4H9)=#1ODxCC=Y>N_t%PO!`%BNnm8I3+Lf8L6EFVnbx zJ!nQg(aEc@pIrn%3`Z*v?f0W#x}HXpiy8=FNZKsA;<ROp@03KiikwHBj2OXkoQ*Zx z8DpSNV@wD!$zj|Ojv&px#n}<`*-Dm70`(t%dkW=+%zBKWmOZlJGEK#?X1d;-zx0sZ zgJ)8p)WIVNXL)!Prt%Jv*-i3>CRt`{3G*dbaF{WBB|#i<8R1NpwQQRq$DW*i#3Ljv zShQEG<3SfUjw=9E?hl2O9^dz44Y??`t;xub4GlrJI?=rZw5lkfBj8mmE&G24WP58; z@}g!y#*ZL`;6fU4NmM?;7_+wW4d`g!?L>Q={T{StpjHP4&S2QZJAXYO1NYS-&UYnI z{h8O;7n06G_xiZg`ZysK8TtzrHa5>#=T+~zn!fuCV^i6bb7WpB?v0Jz_()5i5$&1; z%5kJqk#5SGuqN^s0w_{U)>xG=>~jmy{+JC5dA+43_Fneb_a1qku9_TLt#n^23*U~Z zxUTT@Nl}RTg+0KG>r)sZ3&clkuW0r=45vsNtKo6N9x#m)h9gBiL`pLzwTh+_t(`b8 zJl2Zi7)WD`P1j^S4Ly?{#2U2+>ma>se6`8MkV3Cz<!!QSdD-^8k9Fe3^BxP`b6@_3 z#0(H~bly+?F*)U~(_$M6chQv>^!|qXbXV3VB{WARHxPz;u@A?y1!Nj|1IVL6S40G+ zI$Qw*$_!&|T5RJIThInlGMHm<bbd8?OhEZxht4!zZ+4B|FcT&Shkmy2`+i)OeZ(-- zzOkfehSdiT$MmmgPjz5N(Lz;(U}6}_qk8^Zm+mP@&s+tCWtFwRC**Bso0xN&*q&KV ze;!9Yoko0u{`^5!k4{=?f2m~1*nB{1+wf&rG6=xFd~0fJxPDlRjwm{If8J5zsSmJ4 ztQOm~p<){#DE2D2UnzJe`pV+Z=j_8Xx%D7mP<_vP)c)A}3YIWQUBH%_GuRk#y9dXg ze_g(ie*ZXE81*yAYzeRC7`g0z_-o(!NJ4R<hL_3%81TYz6{_`TmhY+q0!zlXGaF=` zR0l<uDC+&s2)BOUy{x;xgXQyculA!_0oh%6E5zE4Q~JQqcqilcRgd+DqBT{QtJJUY zDntzlINun;gT5Z{tEP79p5O-Jkkq!ny{@-i8**>-{fuSqPTKO@IJ2IabUiwMWaUF| zGF$WH-VER=y~27Y>#AR*2*<M(WB5vRd+xJ(?$dg{JeH85Tif#iTl;dsWxv^+;S{iE z`ti2z_B>!EqC#0gnM3v$q3*dw+wD{6an8Xj=^!EN?yru)b!^0)^BJn+Aso*p_&;7B z>3LkAn&R0Mt)|xHIT{ChAxusmP>a=iW34qBVu=hellE(4N=sX#aw8-%b0_3A<lj>4 zOQ)<;TtS$5Lz&kW#nu#*&IYlgFen*l&$f2vK@EP%<6rP?b~%T6XU2b4Wn`|7gO%1{ zGg3c6arkBo^9bq$vtmu6fJwFQ{?|M{rwh62+>QXu*IvC7ZK8yKB)0tFSF)(`-uB5Z z*KNK1;6H4HBlj9vT1KX#1bvaWvq!jvbJ(13(QlU*6gyjqQ^MxC1e*|Bmm5ZZbd9m& zg*}Wq1dp-Ye$9Nb)|{+IDJC6Slo+R$oWH1e>?t%sJAzN_psE5Rj}U&#Yu6Ali1Rny zIUhd<uZ)X3A;C<mT33nXtjWQb)-F*;<w8)6-~*)4pBB~Xx;vJ*7n$X>TVeH~p3zVL zcpol<hM|Z=Ysdws&FJ8N;<*iRA_O1Bh=~awCgJ>Q;ML@N?yKzkM%N4i*(6AsgLc6_ z3WctqtEyth!)TGW^$6pAG7iI1?VelSr*>zKFuz>;KOjSl`{Z;6-=P4$-0JV5S^9q6 z2rqg~z_)+2<J%gHlWB4(rZr_-6ZrTF)(LTHyb4V#=BBPNq<o)29NZn*6%GO&cQ*{} z|8A<D`%#02a=bR6*pD06nH{skF00<!UOwp4*aw4EE?m9wD{1qbPi??wvOigr?wx$> zwJr-aUe0R<kIpanDtl(6pHyvIfdV5Weng8t;lO(M)C5+`r9<j4XH&dGl6_=w0Q_s@ zxvN4~7Rm^bQr!|IkRpNK7wYruJ<nth6c4soz_XJdBqPmd`;I>9YTZ!s$ik?3txd#h zxoYs==co%yIe(X+JiQ&K=_48?+iMffhI<5nIODOjF}l?I;KAJWkG{6+LOOG*!4-Fa zqB725m<28D+HnQ=ZF0&BU0tJ&C#Eo*^!+LDB4}GonfJt8_+{=t16^OI)gLCa@pgL5 zDtkPpENA@B_q?ON8=_YG-n_8}xp@$t%1eors`nU@(Sv$-_)4|0u0yyFLxW2gvXr_F z`U5^fm!1>TOUK$-@&QbIGJ2^MkxCGVV-9_C>e1(f!Eo#yRk^`&gFh~0A(uZUDe@@i z9i!DDugr-^+`4;~x4@aAokEAI^B=pmjU0Hq4Xs5@U3l5xAvj^L#2aik(BD>_dcIbW zxpL*c4*c2`;xq&Br!5hAaN?+>5xN(i;KFp=l3}~(`9UKLn9`vVJyoydU)A_uG@@zx zUICPScK3XCHF71lu(AU|Hj2v1^W}e&r*H9skTC{3xvJ9hE;SY)t&mKK3p~Pk%Rv@> z>3;~BY^P|7Y@n*P5mW-%@nRvSeK&72F79~m|NQ;#@i#|sZ)L{Bo%5iB#hXnJDI8Yu zX_~r}F$Gz3*c>|wDzNR{_9Q@OXiRkvJT+*WY&ZDR>PTd$uRgPVXr`K_3n>=slz8v= zF;B2yPOLfFAN7AD^VcKB$TavL_@)3XTeFgf5X7OOZ1>1gFwR7eqa6*&G&OY#E}+5$ zHH>HF6~DgQlP~*I%MJJ^Q>ID-0Ekh4&@)`B^|}%QA>>2jOpD`I*cJ-r?0472Mf?=P zsrh9$&Kc;x!WOLMnk~s0dMDliA;pq$i)|#gg8!H>-jZ|*p{a-5QhCI?&t4vJo}t(H zhMlbFPC9B&Z2Nu#uY#k<`f_RKROq?u2tZHNpF>0qfkNk=i6=R3lH%&5_;3|EYt;*v z4|95y4gjKC<?w3v8|xXp1|BN%uIA&<0Tm0+9wWR)L7DONikgLLK2xHTorFB$(J|WU zl1<{hvNkWiL$(nLXvLXuH&4q}6)dTt%DbO3aHM8+;>nZF1sd_k*ipC`v&=+<q|0OI zGK%#U`oF42SL#jpZXJ%NJlef5Ig6<#nC^&tjdLocG7ypokO7=DQL?l;r~uXu+Ih4c zXDMmQn9&;&`bw?WSKtWjR4ST<esNOBjj*>nY>r%r2dqM<CfCite7RJ*;tsJlOxTOV znHX)ni7KIw*bcN7&D};}%nISaXn8p-2v`Da!zrOMZdgP^5Mva|Xxay1NYVKm?*u<0 z3&f!8Zj0Mhqi7oxVzW;)Z1@n=&}4WFMs$6_a#U08$|^nz?v-QJ6)VQN1-EQ8m^ubV zy1PRj38@zk@x$aVMaV8iPvD*gD<{tZF;n#7xbWq@F>=VzdG$-EAFxj(1XRd5dkmxW zY9iUbmQd52ZEM6fMN%#PsdsO);)Na&v}8h6wxDVW_iZ9M)JIjrFcB)gzsdo1j2uF` z%a6c^N7pYVSv%{JR-8pWK$Vv-!`bhQDurMI0ZPY{ZT+~-WdhYYEd+ITlamrPT4h>Q z3%Ll73Ir&{Q75@#BPjElg$+0dFzS&M&|IkoKO>JQ?0vn@)b_0}V|oTHZq0MJ8E8jN zCa2W0tcig$yR7{?J;O-4o}QHLgI#2$%6s9Ci(*KFIt&)VO|mxN#28t%*qG4sc4Q&j zfzYyW4V5^2$R9RPXz`aU^1|q_HHnHs(@%<T))w@^04<$`G9HnrUu;G3I6VWbI)H(J z7IfDhG#LUjc<HUp0>wNnA{fF3?>4)^Un>n^6e2p36)_Gideyp3kqwqVq%nS21e98> z#U<3N+TFCzDYAB$cpiCX>Y>R%>f@yXty^s2j)aIn>D^><;;Z`b5iPlbGZl79RdePv zXY*NGW0H;8W76{KD(Pp~vV@+iI>kPlm_;t}Cmmnqr2+U*`4O;A;`(<$AhjZv6nx3a zqw9@f9;Y&1#b1Ey%=!cIEYaGTb(gQj&_87fr_$Kma=DuU3Mu$lO};AyRAn8(g1w)Z zWX%*aot$==(){w_MI2o}bYkTr>ruU_;N$zz5jv8T>HWIB4z2JAv&if&sT|{rkR+<9 zDzuE<2r33*SOLB}I^8@3t2TP6>h4xnXu_0fxw0XWA<=wPeihi*ujrRVJ|-~~5n~*j zxs*$_#%BrK)7Y|1*Reph2-I_waMYWK^|kueCcc=fKN`cSC+s{u#5?P?+R;f}So$QK z_-R0A8Z*b*sqcP~ewRH_d(tC1y|!EvAVTw%%~+u4p^%=9yxj^OgN(Ylp=$bUzt!0y zakT-L59{Wz$wWS7@ge~o^<t#UlAlVNMYT~AY=#$_Pfq9j5Jj1``_+4DCoAWCkACgn z2vhyVl3bAN!PpBdkVFrGf^OEvKWWoOYWQP>H`XN|jZE>F)d3ki&6fGrqy@)U1)OmI zjN)h6=Zm~Hph{rvWb0l@o1-m58k$<z>;VFnZwAq@VX`i_WGkuTn=!1;1u*OwlbNB` z27(u5A?|rCEnl^IUrLai^~`carMOsgDL9H-(gkP6^R;%NM?(f1uHaFVgQ?Q~r2YmU zD8oU>@~FkA*w_lV<kWJ7HeP<5gj^RLw`Km@mmfG46!yA2+c;8r{V$H>X0gh2z)(x3 zl4CFDcV=Md&mWjWuBawwqO0DlbOBZ^i$naoptIT?aE^!uH^q^KG9Xpy7aw&7o(-D_ zhtjT4gY){^`&kAap_LN$p9>B>yBom~z1UQ-KF09;g%jhNgM!z~!^XNG51kKeS}w~& zzacrGvO2#ThhM;3Of$&eFYUuW3q0}l3g>KMC3Ys&)EfHK)X9s7iekcdN7~j0My5Ym z&Gvq{`{4&<o!@_yUU?J6>j6I=Spw5K3{h(awIXi<@z%e>Ix_V0s$_%Abx}=Frl_Pd zL$y-Kx?xDa#q<UIhLVkFAYp<|-HIAxPvE<OXMO_DqJT$({b}-I5Pl*WqBdT$I^e(y z#onv!(lyP|Dc3Tk(e>upnu*Re${mB8!NFlzU1m4C2#0o=aj$mGX-}qYGgLLR8h~b7 zAff%dgj|diw%9CXf^a6En4)^;8^?JXml%KLw)0-iWz&<;1hZk772EgW;R=z_;Ek^4 zmeaG@Q)5O00<AQ7ApW}7VdDo%H@dFyK5ll!pvcq+$U5y`Ny+2eQiT8ZOGFFhP4GF@ z$QyqZd3pph2g<;kJ9C_rW@#RlBsE1Q2eOUL68M}BK9Gz|bgDGM%=C#(rVR#;c|1X- zIwe>|AW8{L;}8*<sr);!(i*^k8@SW7KfQ2i5f}F_K&H^pDdq7+N1x16Ab@3$H$53@ z{8x_8guDXnz;6~xDVB)=ZY0P9;+T|nK?zy}q|7GZXP<Ze5Bzz_UtI+_#B@N%#BxI@ zMv!l(Pb832Je;YHQ+bY}ozfc-_Gd!^+A@Dbl277KY5LLIY}p9=f#7-zEf11PozA=0 zfO*amR`M#FYwMb@0BtI-Ya8OH;7C=T?;P~<qql-_P9))X0P+)$PVk;{=z@LC;G&21 z?tbgNHL9oeu5R<Qer>b;dOd36A*P7r!z(spvo+^>OfEddezh?tIYw?*l2yp*3LaEs zS_iiA@If+}cy<+ZT=rEx_x({iO_owzftQqSZf?zb1&c#`GHDiolIXp3a7?4oL_&u* zePBCW@&p<Q%i`KI`3O8$B}a6QPTctw<G4eveojqKrwnB_FY+ci)fMgrr|5>UC2+=c zJoYM88#YC*ujco_WS?K$e~iODCqCi`sVjJ{Xkms;@%718(TM|jlrgit3Kp<41<xXw zg+OHPC6_C>yS$8Tx9e!X6fOZuY(32MDaQay$)(7xADD>LU`My`O9dWIFv|RS>?apr zzHGDTC=8QM{`j&Mqr*JsFdlBP;N}l$v9<I+oYQ>8$io&PH~iN~BKm7($=2N*yqBsJ zkUJGTa09glTrFWEDP8XuqU`*9A-FrPx!<`XQ~Luvn``GVc4fxs>y*`DTmK?Dmx`W7 z>j{~9T1L)YH-ud=e>H-QrL}Xg9wr*WlG3pUXQCjS4#knoh{+L@c`y)sLJ~Qrp5~@0 zWvIw)7t`(9=JYhG{(`N_QQM^&(=p2HP178U_m{r_x(X?BHLL0Z5)r+dDF~or8CmM4 zfXF`{691y{-m~SM9mNFt*euS%ZfCn~DR4!B)1>o=H;Yf&2116*l+lUX;W_5;ck=+K ze?J?GcKdlekiFcOIK{OUI5j@PqvJ3`38l-VVIP1?A0DdwING{2kYZxcCvi|f0&nDP zpdm|Ct70B*5-)YWexmj2LhSs4h$tge9mqHVKvW>GDQ+ScJ-?48i-YsyGezt^L5rR3 zG!68G-7)dE&z@_bFW=BUy*F;-n*Bo$mP(t<M!tRt2hQ?KSK!rf@+OL-F(^?fY)$nL zNwtNYJgTa*&fDg<NW+V%VSPJl2T~_$rRZgb7iXoWGY)1D8Qn$KC;A3#3wn$7Y?5ix zGucA3HWTTZ3+)0;bv6)GvC=~Bej{`kU+G+Pu(A3tneLdSsx=?G8Cav+*2o~nHwmY^ z(hK=Ro0)6}#X|iv9@sb+V2;_l6YZ@50>k8!N~6d)fqVJHkEtQ_+c29EOvp$6&OB&g zXS9r15>2q7d2K9fH;rf*sCf*6<5#?R{WXI>N^QIoH{tMm+c;0@27Ho2mD|E@69%yM zrIba^!m!-^48kYmnx#`OElpjKCE;JXHaeg_UQoSY-OQ{0f;HdnM?gt>dOEyY*{n{X zI)CZ4x(06|x^QuF_aLu=);^i!)g5Eclt2%&8bQGxJnJ^GO9un`FhXx;Fhd%ziTOjZ zOWaigZ!!QzkD(Zg44UIy7Y%Zc(NMH)i_nloRxRO#EUJcrcwZNS9+JvBg2~mH1fN<J zxC7x{9J+@>?pe7Ae4S>EBo0h>Trv{pQ;ocosf4#Wze1Xdm$6YYVFY!uvYo*@+2e0B z8wN1C4_B1)GI|&L^bj433o@Xq@AZgRMt8$QL`dx95E*iey1G0?Ps7EAElcpcAmBjS zJKJvwD;4npZ!w5VhU9XZ!DU0Nhb@!?)*b@1+bGOEGq_9!eJ@=yBRFdwLFolaOBshs z+QY@z%z=Y0UozwpRuSd7JqM3&mYr`%YEYkEMY9ex`Vx5&R{}IXEjW)$P~KI$dx6QX z_^UVMk~83|xKj@@i!(a@0-zeQ8O7kY>No*qrQ6J~jKjl1x!K`Z1kxP^1K)p(Up_k5 zE3_{1)wgOs`mioiHV+^j6DIx$CEe;pFTfT*o7EzU!BtDIj`+@7ncuqWEcx%_c0f5Q ziC|BVBnCUwVZnjhAp?<+5Lqt<DI3bnVEM0acp0yI2V2|O&cQ&4x$8>ftc0pvcd(P; z8xyyR109pQc$GsqY)O&}5DQTQ%lpx7`{@cPSOQau-+dHQ^=W$$pven|#L)f$BHa$Y z9{YI=C@=NPD8cibWSaRsTvJpf+qTOp8kx+C^#~k}=|O8_G-@Ew=3mxfS#EX9Jag(s zkdc)?E{~jNlONepzlMZ0%VO(4eydOs`0;srqN0%=Dn^DiLQp~4TV)U*3zu}$l%`(T z^7X{G;R*>3p1l3#)Q<N#9JBrQ!f$ZDbe!=gGO;s`N-#EdpAIx#f)}JhyQ}bZjEeK5 z8sUJGl=WQ{8a$nv9&-Yr=ZO}#e>ZuQFOp6;#5xjD3Nc61{$fMG5i%Hb#B&=Y3`Uw9 z2~0k|{1#0?_a_Qp94v+W=Ipl}Qy6gz;!85jm*UM*ylB7cW8V9D)D1lA4dM_NH!(Sy z6trQYnLx?MNx|$|<I~b)bQvO9vO;=QKUa<-=HT$oU$J-DH2Os8dujaD6yQrhzR!xk z15ZpPVHVjKYItT0!^O@m&%!dxPtF6=K{rtQ(}>sELb$jS^gtR&KCzE`@|r)H`fKd_ zCGny!qS+kcYLkGj*FJx%lOOzL!PX4=!GIzCeRM^sJc)sePJI`=Cn^sEHJdK_zmDvK z(IOsW*QhoVF_C5T5N9Qwy{p<(N1=bo2P6qlvBoYm61x%bYz`};GP~u}=nW~1d3Z+! z6;s>DMN_a-dWbkL5hY7A^@}hz(pYc;IYQP~3=b?}D$D%!iv{C`f+l5u)fF&F+Px?@ zbyI_7#i~|BA@4PR-HP#MulEG_{%ony*^L(Kf!v<B?QYJxmz5?!$!;*$P57c!_kH;3 z7;geJa^l{}do<=Ik&Mj<k1$@vJmXfV184lZ2<m@XfV@APD6ok9;%Tny)lPHCl5*(u zQ9=j#I#O+~L&h*4@SVa(1CRqhhgsx9lOQ7ydoF%bU3z5T*%iVZbJEP9s1-M~Hj7o3 zKfy@D%cj70)6S=Ct|R*_7X7tF8xU7fTSjx1jZin`*?8R!84&4$#fgfRs#E&XkN~*J zc5G89(xQ#WJX}5BuB)U}C*EPgk_u^x1k71*ubo%)Hk*o2AaJeB3+!6!Y=+WX1ak;@ zy52<=;gjN*2yB(DD5}A)a@>At28DXn5Y;YL8n^CVkvH>fy=w_E#@Wv_>vk}@%W{H} zJ^bu9x+5MGvl<$b$<n_OT*A#A*Z*6>lwotbb>qxZs%9EhVvV0}+#dNwRjG(Ckb1MN zWK*W$U~%q*6I7_Ku164&)~+7f1ha@OOXMRwBFj;_b&kx?vM2j<rBukDC$O!k(3Fm2 zwv@#cpyRJcXgAOYz73dpU68&~W(=c-B~A=&0uH2}+C{w252&t_-meHqxK%8;zqJ^N zj2mbq<W!1sS-Dq>)l{sx)x(`9Cq1JUd&H|$b-zzjtrT&>l`ne@P>kjO#G5Y2S;2p~ zZQ4dTUm^aZuEg}WIkVr5cb-*v(cHh9@9m)`f6_cgDlwpZW(o)lpkAK-3esf>jXF2> zCnU8?u@Zt#5Ike$V;dO9#^fYK2%SY6_KQWUMYe~r-)PKWVD7@IZ_f0%0{c=Gi|zuq z{;w%cbB<9zi`-x@!-zux`tVx+C{0Zo30RM<IY$YwrAVEv>8_@oZ<TnQ9}T?7oUJSB z7gL4^x(`M~KG?RNr@!gwhf5>-jq@`J(}P97E^PJlz)ru*=Tq%o$j!o35TArqZ+vv9 z%-w<Z_x=FX^%-Zr6Gb}pvb*FDpII*9H`AZt$hmj*77H}BJ%<F{Es`#ZewL9P8Qki& ztqv>WElWl-VA&BO^(zmOnb$#>FIqhx_gUE37YQrRNTw{F>)Ay*#lDd_8Pch{gq+EL z*|4ZvT`vM)gTf;{kVVts7rajS3ph$*5AgcHjc=Nd-6=n+KDco*8c$%-xA{ZRUOlsZ zr+k%Gy>$T25S#CTUIFY)#*ZFzQn)vnOWlzy0oO)hy^IsG%^)1UzRyygtNCBO;c#vC z1N?~zMXrR(!P;bhX8QB{+^>KC77whyFtkorBjKf>6Xhi$v10<iIfI!cU~HoOwbl=h zIE#!${A@$uqB~2w`>o_{P)0;C`EjKs(|75p2BQ@_3Og1jDt6`}-fL@c!svnB@Ue4A z?1V+HYKhGUL@RvlV)(w+H)bXB2-7$qs%z0zKcDK?E&K4;sS4ll2!;K%APHXHZp1`r z?&#y*t^1kD=`io}!01bocrq1&+rq-zfxsuNRo||ZAZJgDdx$d?mr@&H3bswkzcMei zYgwHIY8ycHIRtnpcBX>vECZjla|c0wmq@j7@)}Ou?FVUD-Wz9uKZ4#yqs9(bgJpbF z4=7-FyypJC$Rp}B3|)6oQJH7-7^tRgxh}+K-;V#fUHZH=aBmeElC%rgk&mN$`eXIU zGUI#U)_zyX00@`K@!Iq`BH#X_kvF7r`9zoZv^-+XmAUSBDXqn5H2sU^1yTFE4>hUK zr+@DKq!pz(9>{{PklzYy3Vl0xZDB#KdS2#IKtfJqP(3wAvSW?dK~UlSIq`9Z`0;M{ z8G;#lF3`%+VGk2@7v*HR@k05u4JSMbc4n?XuuZ-YgSpvVYSa!4UkM`#mLqO`O-)0~ zvahi|o;C7zUYCqUz!~$7^M}0Iv&ZKrk$@E1ylX7syMjbCx^JgSFuFVvG6dDAH4vYK zYSkUPDN!4xc^->{j;}KrQJ)*JBYCe|-e#tWZSdR8v^nEmeSRq5&L*DG7kq&-tBMj7 z=H7kv+TIs}O^?kk@3~u}V6tY}C2^FnH^(vwBJKWja1S$N0hUys=m>htAw0OPWWS$D z;|-hwOH{VA-)xL%m~+{@PVjOba2dJAbqW%&TdM9q;A2;Q=uEHlRAxxyMiuG8-D>nb z*UP;N*LWTU-?xN@zMLH$&!#^n!(#2B)8;FQ;p^(wj&{(!MYUc7<j#Z;0M)%KVAJzL zzvD2|PN%~Z|J*a{VV&sGXU5OxT47pRj*C&&b+fPp(uf<OTq{n5BP<^W2XalwB06p= zSsnHnE=9R)1RNUYJNi~v_}6wPylCy5gN=ItTqj%-R-E0B$v@zSS+KFAP-1aH68A;) zv0#jPjv2a-gf0sV>wYX^uAXxz1`W`4KL&iVOwgq5<j5#UEuQ@-wkdzWZ_eJ7_}x9R zi+SAl>VWEZ@&C@ZV<@Cgmpw}|zs*<|uV0q>a;xgzzS3qpWBBCWZbN1Hysm9cR~f$2 zQxMOcdsI-%dFSa$r%+)@iD3!pu{;2KuB~0an)wv~8k&t$OX4n56qpY-E(3YE<<X}1 za>RU}2988#)MTn<=p)A1H5(rn@4p%AH>CPBpUJ?BS+!1Sf1Ha?e?}#e{Ve1b9x!;^ zn$TtOXFmFvTjPCT8-cXoJPjET(^Gl=Ei-*|Y?fg0nxK1l_}YD&b9p$-5;(?M9&aX8 zolD&OTD8nG&`73(df5P<pIu#&fTq51et#|6qh>ZZH*!^>5)ira+%eB5cGCxD{_*(^ znxUzi#v$d5;xs9EHH9sFZ7$q3ZYYb>Qqw5}?EXB;9$fp}oyo|}F>$ONY#1S)0hbV! z>U16H#mk?u9<s3dx9YHoOHyLzNqHP7DquL97F*uO9}&0tz1-i6QJ&6giB3lWL7!rQ zw{3<Jm6XMg#^c4%<jZiC`441d9yx{=_29&ezSpF2vfxp5llRtE&=+!OL&O)|{s^OI zdKr=cERX_!4zhuq6n$WS#%gCg=or54d1L81P2`<JGPTj->}&4(#LPiY&|@H2bOK<7 z@BP=Yf{J60Q=HU&x-`85_Tk4bdp=OQ|CO-N&NnuzCy6b<z?0*T`XZUB9*F8*H`TWv zb^E7(HzvF1u<(im07v6t$dfU&YW4axa{XaNUUpEQC(A^pURvzX3Kh9+LQ+c{=9n`+ z#6-JvEcBVw>C*rM=QQ%D1d?hA>hcl9CEcvq{x^HNU7o}}f#8z+A-Bt0n0H@Z*5Yhr zCyJ=JC?kz{gsfg^u)7>(VLw5LT8(9L315IFKYxzfeb~}B{aE`h9CTCWwAW0Vr(E=H z5Eu4R&_<8JLT<ZT!cNHqrIMXWBp;9b*b--td_JXFYvhH@Pd8}DHz9Dc!G5(l2C4Us zS`#Z7gs!3A#v#ndo?3ApPj9C0!b@2gF01g;6RMGSCkgtcM6nm`_5QaDpBP^T3x87= zD2SvU-mm4Yl^R%v(+vB=uTXaTpLlX89iuqRLQo>A1E5C&NjE|Y{Lq4O(dL_8O!O-w zkOHH=Ec#H;dE)<r&FgXddI=*RF&|n8zg4ho@#%h*9roLkjJkrR6`TOr^dkN*Oc0qN zXD1{dQy{|0o84kzlAz-r{(5Pc&5?@4WQYlrV37Ka%8wpt$sEh_C>TXW|5=V4oZTWz zjDgYQ<{+(4`TFqIw=KA;WlIjdDAwmxUPeG2b}e1ER<csQ7c!-xQLWp87|f)xrrTq? zqKZ=VL8#vXmMMP9bOmOk{af$-VKG4iV2}Ef@*J4wOG*7W%L%in8;*vwQAQ2U<lyuR z%&efHJ-cp`e&^svBp`>-xoqGKFNZ9IiYaQogUIHx#;2j~Mv7oY>kjW3T%q8cxhil| zuZE%d<XhvYDPO)692l@a?jX+0^d{|=DTe-mTfov0<yeNve@EAH77T}n>EAgRB+{p2 zw%p;cR{vxF!C_%AxNGU`7fpHawRz4*J$5IYt<BzS&y^9HZ-$th^&c(}PC@GcoDV59 z%W6xNR)fbG7Kl$;T8~#|MYqw<+Q?sOn7nlBjGccGQNVe%2&<WZPBbaD0-l<(I02R; zWN<A`7Gm1?28~F!NuP&+FqAfY5HGA6auq7rKixuY1tjdQsE!dMMVI)StYoljRv7n3 zkq6d=1(ROHKm)+H_~%=_W=)}~ToajSQrBiQLy$>w<)kKmlou><75nXJ#ghJ=Urz*b z4IA0O7JUyVkx^<2xSKZHzBlZgFpY(j_ENvqaixFR8W9BJ1xFp};GR>&2wz)l4wsp! zDJcp)q#n#=Etu?{UKl&XCeRed#h^`QuUsvtw&Lk!UmO^16d*NRP@)#wA8E-akKn0% zImDj`*^Jw6m_Uap$~+0F4mnL0E>k6C@;5gnU{h`XefFr6{b5tYyZ_>SA4dTt)%~du zRSM?;|GHp?Sy-nYA<?Y_vzCFD6+WIbKf8D^aZ#@t1@?TWRX$R+!5v?=;-wYflx!kn zcD?0|x*6qYI)HKjS5TyrL<ElCCFwNfzq(BCyzL5}7cjN{bLaQIoUmKo?I~M2Lov!a zn*ry{Dyv}>OoxF7m^(ofF+8*9mZLg5{#OHB9m5$y!Un^ER0)ERBkTV-lOaP2M*XZy zSfvsG0wV~F$!WYA;j2haW1R-!Xzmk1@oW-7dnYF+|6SKUy0|LV@Krb1Ifx?hg(rvZ zF+_D@F9dMrvvZfNR8t~AX;;GpXyh+oLCYQyEv6Q&il&!vg80pg>FnE?E+573&IY#@ zPdz+Qdguc^_d_RqZPdHHPqBhe9+Q$`ORlA07hxG#pr`$=$bRTW`}`d8i=smePsQ>P z{)6!{-=_W(M>_0F8~Et52SIlq>X1vM`K(Y+Le91L(<0N*Sb~pn8m{B#t+D)sAGQrz z|BRMh{0rYo#`tZvG^H$T92=knP29MKdd97^%~6WRBh$<btHWgEAxGyDU5`~r02NXa z+J>pWqyEPa3vyAdZvzj(3mY9_-5ZwX#W3F4Y*ccg9%;TkVzewet@bb=zUmfEg7{hE z5nbE+`U8IFGiT;zG#G2{tf*6_Z<_yjZUjj|)L&ePnp_X$jn!^5)oEyohZG>x;c|RM ziZ*SNj?&;rmP0)cwu$dD67n_!X_vl#29&lsTAAC2T40)GKP#x1y`N%-BiAAyJm{s| zze?KV4CtiRN`nGSXFD7ck({EGF}~MDDQZZjrebDUPDre^pO=a3(28{AJp2>9*NfLs z=F8y7d*Re1B4L!@Wp(pIZ`Jx+i0D+{d4Et{t`o{D8ly^e(#>F@zLVLwX@VFAG`+}M z9YEn({|)shB3rj)b>E1c?YU}06truW4C#v0fCyz{$h)hPa>S=bM0#_O$I$j2SO~yv zF)7fiTLQ<N>%I^E`^Wg`<Qu$p*&gdhx*Q%&ks$Kn4bF8)&H|GyQLq#*(=A+Gu`Y!u z|8hTy6>QqV(izQ_8R5-KW1_D6Y;CN&ED5dqJPN^M<veruz1>;4j*rnMKXQP(8=ZY3 z<Lm}U)NT92coWRB-3HwX!Be48b(zp}4OZ-8eVwRA3ki^ZIoV{f#(mNG2yxMUMgq=R zE!OExu#FH+fcr3Y`aJn2ma4_=YQ`Gl&iaBVFF$9aI!@9^3v5w#sY*6ZFyzEA7!02# zW_DRNAIhqAgcIg>V2W*s&4gmKz8N=*ESt&Hi(UFg5iQ^8sO&(Kz8#M|4MZ53j!ffs zM@R4BQA0D&SaY4et>}NIYxnM2NUB43grd^MJ__4Q$S3JV=5HJK&H#b$le=^Vh%r2{ z1z7MQah&HFe4DqAL4(?#w`co{<Pp-ms^WW!(`JbRk$q3MZayy>dE$;@yej{x@nS@9 zW^Yk3wL_F|{=u>fSawWOYO~gy10LU*HIEJtpQaxjw~bhyc$hox)WheSr9sw@{QDp< zV`0Fl`%S9*>X~Kxj#emn@d<G5`AeD!x}}NZHZDOsqYnz0WPvLnw_5JD)br@lFNNze z$kcYTaT$Qhq5%TatV*|=@?J3*XhxoEv_E0{9tHa1<DfVF;@GTf=JYNppcsLs{eB(b z7&v<psg7OL(Ic2$0De&LzdWw@Wy}O#7(MMu8ClrAdWOr_ca;3(*6DENB23Vm;j8oJ zoAKM!?Y}sKBIV0_?7j@k_8$M?{orQwn~gSCvWW{g$kF2_pdI+CzwY|Z)vP{D`?*sj z_%XC6pHo(;9`G6~WwS7>4$bv67B+(fzGpwazSl#MeF2{JAs1Sa+$KYB?nIFT&E^EU z8)2`HCmH`eJ6x9$hc?$~g_*;gppT=tmeYM*X$;z@;WUwhTc-G%bRaN_qunsu>o~;i zT-3B`do{~(XUa+FS4ZJ?>O$V+t)Vk_l~!HBC=th+Rr_aeSI0h~(IKr!cZA#4%SiWm z;uiAPT``-Q2HBoh(YB+1%OS0=r=DFyE^&*Qf-^CD={W*kH{ibWG_UuK=j@05h3670 z!JHo?L5OyVf{0M-FGZxT?<hRZQ*FJIHf6cvc0uPn-XC>>gm%C0-3ac}3!P$4|K4~S zdH<P~o1V?cC}3;Ier;2}{uT7z_T6);g~;V@4je4f@P2VKjCRhI?VnmQ94x^N`jHXU zdNs+B2kP3q7SR!2Bsi_|(4E!6g3&wMfh;RDtza+5N26feZC-TmGB~~G|F5Gz=;h)u z-wt6U#~Wit@XQCirKG#_gLzyJ<k3J?b~$P58$ekym=V|vWIiqaq0E1I`SB4Z_^iva zt>pBMq#UryVXaslyb514c2KR`mb);`8)h*9>Ntrce0r=4_=($h1=FlYY2nP^{0*w{ zeZ-MCVSk(U2#p_>&S&bfH~I2?d*p4AFffm&`=G|2_ZkcFo5Ww~axNL2pg(ij_v=T- zH=#((PZaNlzpO;wC)HhdCtwLJTy%A<v;qRK6*7!P7?Q&1<?xkH;kca+5~tre4sSw5 zo_@IbJXZz9F5dhtZ<Y!$$H!z?a+!2VJSfIYDB8$9Oo?T&^tTVyP!<lUc8b=t_ItTP zGM~|&3~`(VFCYnK)lBaMCHr73#r`1a2kQ*)>ypp;+2(JznLu=QVv~ggUH6``NKBFu zI+Z}g8o&`K%W?OHf%!-~@R^U1(2hL78otO(7X=ayZwCfm$`U5%sm$qU{_^|8+18Dg zq3d+j^SztlP%}QcV?v|-vphI0hRJ)@F>~|*ZU>r^GAh}$cRd}W1;>In{kl<^d|uy$ z)yGZp_0<|QPdvMdZGfq+?Z&Z%(XSU>iC*1%#8@pZ(}B+nJ}XY$X%=S*=B@hq?qOVK z-1Q&jW<CRSBTXm$Oy4~YewKrKyI;HSM~G(fx^IR4{Hn8HevGD~xkZPKxlX!&B??+^ zU?e2ntDImd5fU2Ym=?q=f&K8)4BP!M{q=j1X+I)-!0)Lo_9JY@|61V<blIKTG~>e+ zfWI(JEM4{_o1z<|o@v-N0;b@AS}T~o-%L3<-|Uf$L{cv8<;Vb>nXzCHq5ZPkz@c;a zeuSBDokf9e7x<D<j*+O39e?JIfASxv0hdRkdn!XC9-UhAEo8gU8SsazFm_rhSE&ms z2LfB~%-RMnFf2aTD~fSk*RAfvCQAu$f!3@vk#!JX{fz~dfh5NaL04g<R}F~)aavWw zPJQn|YJ~bA|3eqG_~e6$*?4|8d~kD0_f<xjy3XM6)*BAEnXxSIS<$vZG8M)9Ye)1G z>&O9G3ESt}Fw5<8Y%fT`@cFEJhsh~_wrJgVM(a><X#a*lU=5#;$I;Z)6|A**666>r z-ikaV3O?^+@;)q^C9@y*!u9_%4$)9+NJSS%_9BMuB9&6RY72U8Tle0Jf9p5u{q-Zy z9rk43)zU9AH2uXIlaAVrSf{OXj84THl4s*7VBel+&%?<Vb8HmQfji1ss2?m(?xo5b z;}|#Jlu{=2$~f)4%JH1&WH<?e<JQ3IYFpB6Kph<xW5Tc!S{!`-d~#W=7E1ZmbMtr7 zDs56OTiF>pOTGg7_C0%b6nX=4^KRs5zA1Oc$QfcW1XpZzJ6j@6tfrzmkUovqcJ_Ie zPm*XS{`GTN;Fh;yoZ&rat7~b~PogOr36dgzD54z%4jg?qHvJP$#mqKQKBo8wZ)zwQ zq&SOrX9Z$I0_uMkcOC{fwwo$K#<Ujz3P)G{yqLTKf`ZmN+o}k|bL9$?{@fM_yMNp8 zJKL;$&3)`X5<KGT{_N++Sr4QgnMv=@-Fu);t|{Aw@P*uvPido$pg4|!-tY`gnY?z| z>I{CkAi-hoM5P<N#<DCeoGZWc8zQb0p=fsm*w9GwLI{2iD7;<IFg(BbY!y0=qNQ;0 z)no9&^COYu2$A%nncK~Gzi+}?=H9?0eB4=izhoT!2Po<#rKk2z=;}$V*>(C-_D1}9 zgUiF_|3s2~|JP0T)-cy!Zhm=wASn&&j3@01Dx&8RfB0pp#=G4AqM2oOojsIVfuyXh z4fmLViW8ZV(cQgLx*KRfsCKO*oF}v7ffxaKPHey!c;}KJXi5Ki@rZymSXi|r-KLH= zhDE#~Tw}moS<uki6IF^{#JiUrB+)>SwQRN<2wnO62T3Y5k-~6&O>Lp**aJN47%o)l zlwf>9_k@w553!WC%Xie&asd_6fyG*Vw}eo#XgG@s&6n38eNyyRkD4$arp)qkZ=ocJ zK(gzwn{fKUzmwoXFanC#=Y2@8$S*I?l*&Jj{^E|1`kj%95skqIBE%6L4<R9o?FVgM zKuF<HJ^-;7Y!VU3Uai+RDPe!}U%z5#wxaZ7ckcGil~GNTIQ<OtHUhu!u(p2p?@wa_ z{~HaNJq8+~k}s*yxund8j7nt1Dr5%s$V5zohI@}i4Hi@?!ncZf)y<4~+PWRZjj@jF z(7R5-fZ;b2)ESoKvEt*?<Do`m|Lp?mL=M|YVdM=v#)M{<YnPI!b3b^ges-=q(cMD@ zybSX0zKSff#JsVzR!2kqdzxJMBnnX_c>A@BM?%RXtQGqam)#|UrT>r)GlB0=`8S5K zwOuzY7Z;9S?AH>G>T`2RLdkx6Y<QDyJtBnWs}z<izRFW6Z5nk&pqz0#&qBb3Y08<a zLyJ@9!6B7T=}=+vJN5OTZ`7-LgxPaXphpo;gYil6wOOK~WW;3uqL)@yh`m^<3W148 zYCGD{bkqrZLv{Bj4v#&!<Zl9h;M)|jXWV2h*%=KUDCT9I_g!drybS>}0P5VMFj9G( z(=<eB(WJ^@6}&&lgdyCH^Hjx!^J`#faS3CzzF&s|UHz{;VM?YlSpe2w(Z7l*8H|sN zZ%i{HU04bl$stiDcnv0T?&_2j&YCS*W9GYJbpZKphaudxpXm7Y(d(#pKlZN!^4$5A ztgL7=6loU870VW|Vx^FkP-)Qy0@Hzo;jbMey=Mhy2=+XR4GF{|BvRk5q2#tD^2Nm= z=-mGm4$X4eFAbuFnp4ObEU02sP;I>=B9%9AVx&bFxFSHp3@T#C#-wtSmR<Q{f38PY zc2bUzRRU2$zYMZE6TywRl-JY@du-^8uDK8~P87~&(f&}{;r%ME1|H3&EkmSAaS06$ z>KO?Rby*a7>e;`ua1ZvRQcKB|(qp$`h@iNwU*8xE^UHWtm~Aj7mecSN){y4{p)-Aw ze^_MF$O2YUS`!=}2zU}o3kIK!6>uvpLu~VH3sS<4<TUZ~3${B$GrwbQa5?B`rIh7* zr<A1$D$+RA`%J)s{t1)J-0mXK&v!3!qDZOzhYrJ}Ro(})S}efOu3~k%P5)b^$gjlm zUS2#glBRxTeG5g6ClGf=)?dJ10*5Ig#6!~3aQwH*nwoxS(o2DV*72RWH^^Wqo_Oy# zJ+f>;w;5l+lM$0fX$XnRp+*P`Dk9Q^Zn19*Xp+InZHd=1g7!vncju{=C(rIb<jD9) zg=^rBUZT$8anFT?2%|oRoT11>d~RU<@=#j~r2puR_UB*npu>p;0L23Wgn)&!tE=Pn zCWFh37D%lQBN!3GrszrwqX(|t?+^O>u6&9Tlv!0JElp8gBFo{0`rhT`oe5`h#i-(H zVh~c15GYHYVj9+$57zj?h&2VRU$-9RiaD?XVsPR8(QiVqVBCoXc|<8i$?%2k0iCst zt_McmFW0ED`ZT$Ad(Q#Vth;j7nbH)=WXZBg%4Pqt?phtp*0^iWz#{v}`T2X)Hk_3C zhc$cceyrqlcV*@EevWdPnTf;9?eWPe$c0E=84pFZ+1Z86obQ~9OOqocqqhIvfWK2f zwaEiIH`e4B3n-kas-_uo7M0K{DdwAUcxY+AcKCdhN4wREpz+PwfYhimT?<%fKo8eh znc#p;iW-iF7b)iC<YX^X=(5lI_5S|8SiPd%nC7(I0uQ#PriKc$;7{_MzaYM`012gZ zVgXGS`OkV*&K%~oQccy-Mf_Cx*_AW(EH-C*)NcT5`gHL@c6UiKxe|=_1mf|7bLe5d zLVF`Dss7dgj7XqKI1J8)P>y+H%Tq{b)Nh0V`?#wBMkVSD^<<bR(}t+d?`i72zZ)$k zydP_pDyrn>|E!O4B=(`n3~?z@W+<j8(n#QoeJd#_2m$l?l4p+Sun^7J@fjyf7fO|= zevH)=_H<Fu6YC#Ou)>Oo+SxIfjU-TmxovA}3Sejt6BE<5S3Q_v<!(@CtxdGL0GQpw zHqhh{Go*i-FKSzsXl+dkhm|7CjO13Ohq1R|N><Y6eWsYd#$)4@DQ(R)Z5U;!>mGn3 ztsZW62UC!Q7&+t|94NE69mzA;g=_0-fb^y!wN+I}6OGokwuLn{@zc}FdU|^G4p{{f zQJ_Gh1|3Owu?o#X@YFvnP%6fd)9Se<$oP&U#l`04QLYu)VD?yAV_l?6mm(K(9tDB8 z_1M4}uPHsqneU(>;Bl|p%wrT3|J%z25^hRycxoj4a%|M~e^~&43^%knBaDe3UgbdL z(&hj&PW!)Ir01I>6)9@6D+8==a9DyfgDylj&w}8c9{3da!8;@T%6PU|V>S?u@ZVmm zp^YSY>l1ybr0D1K!)EM!l^7Z;m;*@Sdra=yL9~#V2WpTZRZ>tu8kCL`<rpYwJLk8S zH~Llot!l~jU-OUp4UCxLnAoUVyZu{gSGrhrVfc)WkReXZ(3Duq<LbZw?2R0Q?vJBi z<uk=s=NOeH5IfKnS@h$z#H@9uxH74yt&CN9LeZe<@t+JCU}~XL&pnRcMF*`$neqV` zB3atdz!sP5qpZVr(NPdsQ+QLQ?{oyLs<l{%yl*bHlcTj$6{?R7cQuSmz(s4dxf3il zkW?tI_VYp+)Qj9+<)+6dI3XK1z!9;}_J`i1b?1eNv{9#zXf>DB;JB<YP}qKkmhbq> zY^zHSnS?lxD&Vq2!`QjDb_JwnR61%@=o_KqC^Zx4(J76&j0yaEpT*;Jh#K?+_1_r& z$Ak>}xXt^I755+fEz+dk=hiYaGjlhzH3$|g|I=MW-sN2SM`by7#=JkQCGI5%B!Cyg z9Ps+W{A;jrK-uJ{*jIARP2F1(85I!-9%osL6n8#q`C9q8dsTN#%7X1XSm<C!o%A%Z z-Y<2%4T$8>JnPO-l+wu5$((yMR1u+J7J7hh^19fh927pa@IN(kzg20mIc*A(`0S%U ztT~A&3*Bpi30snGZX952V|SY)6J=ClepgkPJ#&=g-cnyrqLYC)f>X~kjmIldIIirQ z>G85J1YRZq&Y;2-5(&b$eg^D0tvcVZiwEw>NaXV#m~h*a@$yvpe7Yn~@~s~u7!bgU zs|Wom)ugyJKPPB*ciV|?nUN;Lu+xo<1cZeD4b8KEE|?$bHpR8XYB7#g+j&Z_4CWT5 z1M8~<T7GlqtXdC~L>zM|nSm*n-<|tm?(XicNI$Ph74w91&<AD0iPp$Ct>?@gPhrud zk-`g;rb}(?D-ZhNE{}pK6O7#ozGTK&951($o_fNhXo?&E`p${Jy+&>5f8itSvn{rt zVq?BtM8F@SAr2rYwb7(TuY6iA0LcGCmW(DU^|?K~Uda1MZ7>^geLnc*HZMo(Fx>MO zg)+5qffF9meB0&s{`<8-R-1ND|I-*;Q$rCFbuzUxl&a=D-SIh$!S!rFRCw*pra+a? zdy6*j>uugJ`<-*Y_C@nkK@#atO|30Hcrv5<6}vj2r$MJ61t%v|AzxW+2@W+)Y$d1y zI$2zK>Zn|QS~>%ZF{GKf#m<;adsuQZ6TRxKD+q~9nIU&}r3G+J`H$nKn8h7W2Ja1q z2|iyZ22FzN&=hzgN?1;1N>ykMv^q4d*xO%vev|Bv8lRR?TQjAj1`j-V835zTgbyb( z!Yp*b2+ODnjWTxMJ8SS(J4SMM5Q+$TpTPC$iP7gD`d7XO9bdt$&00@_O#S2ac_{~n z1m<rgI(Ku>`ziF7LG>YRT7830*L&b)+KJ5gJ<`LxNjJ&FnIfb9gPh{<+rQ3eknH|) zFBtt9N5qG*<nf>H{Pf?Y7DSPZcl+G(KJWif!-{x#c<}x#EhYbA?#3s$B=wg|I({|Y zoque##SYJ98y!mlLMVcwR<k~ZX3V_Z`to@62aXSct*d>Y6AD4@gaH^(!iPIuDr~0) z=y;+I*_CrwO8SG1r9^E}ZvSk|gu2leeQow|_#5g$hMdfnoy6k^!t{uHmzEj>L0S0O zT=;oR<))=BAYOs_|7f}jpenSk3p~2J8x#bjySt<t=@L-7ySt@9=@2eTcOxa;QX(zg z-T%4Y%>QN>XWq<v<Gq}7_TFo)y;e&Y@P11Jf5NX(g;<aYRH;LpOxJ@T5a8@7Vi<6@ z&CSgXb*^RiIMjnN6tY{4h74%xnkcG8Q@pe;k<Wai7*zIrj#%xw6~@DQq!+0St^5S9 zQMkucd8D~pqd-bJ6xP$*)e(C=Ms_=p(HXAe;a74{NQ_vp6rw7=5dJ-eNt9Lk#*5x! zo8PPe+{I^i%D_iw6@hJhpe5MPOsRtG!&C-jPS+~^rxlEBI^DS`a2uq0y6k&wxjKY2 zS^Gd76CCNV50ARlM$R&WY>N~TLYS&|ei~{6Pwu_2zFouo@Hhl3yrd?SVP8-G@F32X z!uZ5V#GS({aJ^g9@(FmGzC057-L>hO(kqcuwfYMCz4=wFt@NMpAoVvZy^8^+bm8_) zw!i>FIVxv*ksKq-Pa5^;_OPk;9#u?)v7jx6diMdZy9v+*jsfq<VPL%1yjvJs%@S)~ z(>&s87n~_e9k#%PnltvH<*0G_b}BJI+Q^6kjgZCka(C*xNf+h3yTvzNrq{9jZ8#zY zMRlP{f+PJz{$EBa+q1<w>f=HaghRv?5C5vTWZ^SW!yyr*Wv50szRNXeO@&@b-A;Ex z?D2~A6NLOE73PIkR5OqWyNcV}HE+uJ`1n-CSAMJ3z*5xiPxEJR(`zh&X;bSiEx0lL z!0r@LTuu(j-Q8WBk>2z@AuuQ{tf>)A<#wYGtyz60cb!##JX|^;=H0`NK&R+AEkLou zYW2yVJSzBv+Ts@Sc@dv%)nt$kYbEi%pKJVU$5sskJFWsa$~na)n`tqYDTESlRLh$( zmWm~6>T;N^1M`}UeY2JcN3G@kDSpAwNJ>>OGIdg2zN6C-^n^f?N49T&5_NXJW9#UX z!V-agOBMrhd)7)Gb4Xz+7mZ)v&%1jA55c>o`OX2+hr`~V;b_3UGww#6r$LfHBCOa( z=8YWMPu<XNIc<XLFOMh=z!mZN{9N&xq6@2`fyYL&=M6q~r|JMFyLR-OwW}_coxsY6 zH%0HWZ>PSFu;ar{%h@ndOGb*%;KYb8qICA|Z|2>s^Q(OAIBTyaz7l)65NmmPeh}D< z<7z%1W>&|4^$#K!`+;UyuvSuHrlFIAUJ}XT<%xmo<lBW_ml<B(S55?NZD)!|x9Q@f zi4=DC<ZSU93Q9dMBD9nCoGb>Vov(GBaZKHwcKAkgmku(QYy;vLCtb3G9zJ8gm#;!$ z1{=>hU}m_n#VuyA1zQF6AAd=qleI9Ue@Ip=PO6MOHPna*CKT_i%Q=2~(7fJy;APeC z!g@E}MAEVIi+^~>*I1?}D{{yCjMixWs#&G5ygb?>Q6wEy$Fo^Y)dC0;@ClrqpC9bk zXxo=U#<7N@6~Z*@_o&gc1df<rz5iwTou}k&fvw%b#zw-4i?WIeDded{Q9OS~95E7V zv%Rty#hE0UM~|rv7T+_O2uyo3uMzCpJ#LXBiZxUv<&yHheXRWLmya3&zVj65_TM)d zGE5>$-vFb`EG;I5&LlZa_b|27KQJ;YHMO!=>i&-%lnHp#J*{nR>e>Xo?3qHItWAG? zn7ORSw}7uNL&}ipGOxyP^8n*}<o#BaaxMBSrLcfvWdHou0mJ~X_qAn@HN#Fk%}qX{ zRUM0ITpm;|zBIeHRGq&1wlmLaf<?xEf3Ku2@MZd)@NIYKrH2P+eNC>Ja{NNLgA#(9 zu(8*@LS@JOV7-G^9+mO6zvxqWZ&If;j^eJ9tzbZl7Ypeh_4iDin4g2y@WX-YB>>PT zs!e;~FvT97z@`7~*k**&c``U}eCJu9W(sU1N52ZB0DotWz-K>FQc~=~s^-xP;Zzrs zhaVc*u<|6Vgz#{^lLF^abS)2+ZQg!E7PHo$h?f?`S-;5k_rBfQb6Dwn>S{@Oxk+h3 zuc%rdH*hTF&5>4@_Ub;jV<|zeKr62Wh1?7LB6D~8_g3?s4z2$<^<sPtxZg8$?k5n> z>&1?*vWdG|B#*`pb79peEF;a*iup|EX|euuwc5NNwRR7`H<CB>B&AVOQDv|ct9g5e z&uP{1cxz2nX``#Eix5LBwV&%!o|?4p_cYRfgJY{RHSWSlMl(`F46yx$v1WVZ!rR!- z?S2Sd*)Q+hV0#U+%O~cN8oANwe;mx8|E>sJA0Vr=nqy|pdgx`&^!};EYj0Q5Sc$lb zg{DR^pLnEUIa0!M;W46qetqo$`fP?AH(X!{{x8?}czr8H71)`Isw|&C63gVjPxB&4 zU^CN@`(I8ScD+0sdT*zplkuXj-b}fRc!V&|IWbXKys^6b8*%+x=Y4i0r~MLlz+J4# z`FY+;T%`^7+`Q%&g~C{v^)|oL<A=xV`L2Jt29A>H=fZv`lF6+hknlI)mmxJQzgTnS zA6<E}v>JF-^GVFjh#_wxWn_DjJN{EuN4kMSOZaA@ST1--`)4_g<{ugY6K>val@D13 zm)X~=sCNE3E|N`FnRnVT@>FBGlw30}L-|;zu+RDCQG@RX*<XwGw-?@rQ>#;kCZWj1 zsiLPHi@LR^oewn>c~cgH>Y4_LsmT}z^JmvzDv0@fxQYB943r)+iqz<Dfsl!CHccW( z&GYL>W!%3?ldjx}fa|)<(jh!m;VISUPr!9}lvq!i#)=prljjp5)V4W6=-6~Llf!wK zwe_z}+i=_mVY2}?#31@4xB|xSeot>JzdqnmdOxDPmrby|T;KqmjNp=>x9i-2o1LxI zzv!8}i4)_#sDk+QuPmW1IOx)(vH=1U5H)uPP+hQpEZ8rXf+<f5Qy@&$e_s<iL>V|c zHiZW))xxiLU{d4Lqb7>hq@FyPV%i&lGDfZ-Wx>VB)De#B*j|gfhkx5tl{>a*og?9D zgh_IXeQU$f<gxa$EW3w9<ZzYEv%_G}aoxZ}WOua`U)1=w61S7FDI6Jwgf-+p*h=K8 z7csUkV~&J>BMS}U7W~<=vm+*Jthf}{E(ShT)$S~a-0kaIyY9zrs=wk#AX`zx$&NT! zw2Gg_lA|{RAdrUQ?;i$(`qnuz;HH9>`|O0MgH8JO(?TN!AMU~;&Prt3Ebyn{e>kkW z1Afmx?Lor@dd>LC0{~#u==E`rWoERCM0L}xE=n-z#?HFweD}*?uIh}~34FoDxQajI z`M@0?uUy~ge!B54klKmj`KlO?e`mzRazoTNysHi7^x?2s3x;P_aP{unFQ(^U9EDa7 zPtQ7FHLN1IM~^AEOYP9S9wD*lgr#<>Zn=99M2(Hg%7ojz({$r<<9KYfn3vAw*Cdj~ zZibtnxv?_m2-@bX<KJU`PZc|-S5;r*lQf2_1&X(>v>nfGEmY6ePACi7+KAXrvzkxf zOI5{k%jKwKUR!BJB}bliz-TW!pGjNp7P_T@zR&+=#qZ@|b!Yk=+jbn+_^#`z<tox4 z>Hzk=oGqQ4A#x8ex)wNTzu@0a)ocbnzBMe&m@B#tY>52F|4|q;X^A&Uz6v!j5U0)R zyIPO_mTNJTqI$YPWm4R<@J?B<_geygvMQB7`h#+|{A)8)qIa3;Q-Rk+)Kcl(YVOd! z1t<Osv@L~_R=|Tj2e?9G4I|ohFrwc(o0s6%d)}PRP6MuWy}$k1N6*UGVD;CmMdJ2t zxh4ruA;QS4T2TJzGQz0{gUZZ_UBVA|KLo$-zRe?^lbYS<e&N&8<jJYSx9rZ3#F%22 zY6;l^<nb*^zcy3X(hRw!5M(4`U^t?3Th%W)Ts9n9_g)9w&*Zr*T4gxzmw&siyZG!M z`?WuZ0*8Tjm{NNF7CcesM~;DCpv3_CCouS&u_|ObReX3c!<HzsRNo)hJok5Tzk=_c z-Z9?t#1b2xVG~Xef0Z-FX|`dhA{-!?CwK^>g%Vz=g1eXvu`uXYiM3Hj1H{y0kW4J0 zGjM-)Sul&VPiYgwUUsp2h1#ih2K!&4@(&6Y{d@F8kvo==47P7tOdPhWHRSBxoOwCU zsJ)R*Ns|bYieg{!EU|&(3`TSmU6ceisYF50<*VB7A=Fx6f)X<%37dXrxl7wyc3{S| zecFrl4Ri+p?ic#)MImp!Kv39_HuZ1VrXPXGu=_tO;qK&D?-szx*gRrx3a&Qi#m8s5 zNGamm(Du1}NL}{!!F_`ui3Sn~&0LXI<un`A-ie-K2eS~}rftUr$v4VN&ei-d|0d3T z%m)matwk?L68JZeE4!Y3Odm9Sa2mlUTi;q0OC@8?4p;2dqBncx^i(}lNDKSsb8Qu^ zF>*`J#A>7R{V(!mPD}5@clnc@xrRn~xM>()glrrj-<sNjXhk>|xf9f!>=HFp`QFS> ze^#O;z*)j5U|*On@)K2MN`uR9YRXUzyq}39<^ZV=gna~4X~S?->CwxJYI~zPyjZPU z$?x=lD?3QifC1NDwcWlL5#)$e9vriq8+^2XrEXw=$-?*~JT*Qp%+r9F%YcGUppAkS z9e(+_GF}Z{LqUsTnaSh5v`Z<-03dfA<sf&PlmJHBRK$kAMcnLO#au?AH{rwOO)^~h z@TSOr_zVfgW0Xf2KE{HhQg1X3mn^r-v6|Fvr}u{!Es?~bkwSPQ5d?#;UAQmHSWYKC z1uqFZ__t>C9XE%xUrZUYC75ObXuAv*m#z<DMg7(hUCrW1;)3%ROp>GYwmh6&YNT+) z6S$-DiGO1BF9?B^Sn$C7aX71Zswhf}Jo$MS60(CY?t=^~v3At}Pq6OHB(hL;;6GRX zV`EdgKFX-o?F|^6CjhilGyKccu3P7(DqnanBfcEINsn=vGqK*P5ZAOEwiQ_op)5vR zlZRWGS&m`^?IDN%6TRi??bzIQcN5NSJ@*`4NRZMreTwqHMhB<UFG~&jX<IdX!}*dX zwfx<~<__;!IFXo6=@tA$k!w9De*U}Ch^))lw#_rV8-7w%m*QuO%}Dy&?|L;M&{ETJ zy@W<xN+CUElyBlYi6vE7Nm!M{Q2o$(kelETBl7B_%bRXA2KQCg3Oe~iKcGZ5lgkQW zg4{Oa@OXHGNRZvVz4h;P<1wobU5ZoMOHI<#a5A)~>St$1xTv@USQD%pi?9wu{hVVl zQ?#L-ixNR;@_iFBEzH_$OYp`mSCG^Kw(mg>$6k{tQ}g-x=dt`Ce8Se=ej9vIu1bHa z{xEFhAEOf6{L!g0h8n(S^4gP%kE(`t*6Yriq1*>_2fHQidaAi`9h$Jg;86Qx!9{<7 zFiJ|KCl(zPlrj`5d8$dTx)@)Ieb3*Y)j2z(b72C36w%lrD0r{!w8<Ok?A+M~*%;wF zrMcdUulZ79uOYDptkItJ_UD~!WVkDZQWx(dzuMZ3aQmT{N|Z@Ov(?SODU784yxK(Z zUTDeLpDNFVUiU3gaW*1Tl8RntDJm^8(QpiPmSPcE=o&}Hk<+EY_JubLbO3K{ZS?{V z(1v*(qY#mq?o@NUn;o6tPY^BA3qlbl0FW}pjWOta&$ARwC=wbYUxE6bS1SL2zcL;j zj<Z1@mn2rB965E4*iz3igqB^Cq}~mc{Nco7Ok3-$N!*esoy|mrHDhy93M<~e&$LYb z>BvBffo9}dSz~usa*0<y7*a;BT=6GO+dT7iYk_H|AcS_9knGj>d+pTfx=^;yaO4yH zSdX>6TSa9|F_fe-_`y`a7TU1}uD&Z>NT(IG9W|0cAm`&kCzl7ZI(zFUqc|yw(mNzF z+2DY^E7vmr)9egGwVz)BxnIZpaMz#wDN^M};aUcoMc8X54UM%0V|^B5iTi-&x>8AD z4y??4tNtPYR(xo#905rk(3q7p#s0a*P$}_}y2X><g!wj1oXA98kkWNuvyV#JZtzwO z*xLCYQ6YsI4*SwD%@W=SU3gNk0C1O*;##?bOE`)25NCAr@c1tzS+g6<kbJ)2TN@b& zXW{Xm>=pYgzs9d(H&}@O*cXj=CY;Fk*Q?0n)Lhs31D%%OHulnm=c<23WhE=fO&}LK zNc)JBw%VUCslD5eq-7+>rz{L7ycZc<Y#E}V3X6}iQk}%;c7yLsfu+`?bi8{CegQSK zc31YAEQA(ss-$Tp3e;{75;5oxNRuQ>e*DPs>y(Eni+P{Wj(XbjRuCU8TvYPg4w4zi z=fV)krh*!eNNRybs#=VqHcYf`WkP%mbI41P1wK4%gc&<Xk>PdxOP)K-y3yx=HU*)7 z-_g|ASa{&`T_5eKh*CYxSq$Bc+v-+}PYJI3vuH5(Z5Y8+CpG3(b~=GvSuw6aJt}2# zz9D1dm6m2e!~P$gGmf7({=yR$z=i4%l&2?7VWIJbRNWhw<vmsfn<9MWerL(ox_aoP z8ud9zD|FJU#7W!z{&(fA+Fg5zBW56F34M<Mwm&%@jh<5<U%O=Y4qm*p6f-QuYPT#V zq~O4^))w~-8kLikxb+*cGOnoFkDVtL#Ig$mdWvAC8vs8+oyfkI4=6MqD1wsG9A$Bx z9&T=c=>`!MFlRh+TCHU|mh9EZ`aU9&jpmd@2<0E;5qxssWU9h)<p&zDBngT+qpO`0 z*>>$dt*)O{lx=K+2C}%KB6htuaxk{LtI~<P-d+;Xs~?w<=?X(xuN)qiu@&~!pv-VJ zj6@SUZZy53CA0Qe{#HahA<Vz=oDn=#QG!;HS{4iiJ+Fej4~*%o|2>M=rmehSORwlL zT^WR9gSjZKv9WQ%^k?P4noe$@BS?F*O&<HOd8wntf!;?N_1_y(4yMi!aYT7~h#C%Z zd$$y}_9>z~4q>vFahYI2**2?;1XX!!j1hLSz3lG?V~Ad+->*h0AK{-LeFDiGBa!dB z&I*>FuGF;CG|Hs`(*$63agzw^(?)T-%_?k(J7&&diktRsIofKaiiy3La=pUU!j2O` zB!;`Io1cxggfOV`2qTJ`EP^(YMS3pHKF8X^m#1_v_=>!Z_M1M&-h<VP;r1EW;_+#u zvjWnjO*pHB`C!%nxmZaPI}f&5fn`R^3OGh&VSXDnqKe;UY_bU_bh~vPmwF5<A|p%m zE%8X`arvB3EQ74{h~KwRaH2}U1i)0Hy&9Bb3dtTQeMU-A%#t$huMDAhE$`VZG3huH z{D8?s#$2>%m$P#J3FnRR4}+!zk()nwG}3?S3#N_zi0==-Xs8=5>M|5$Dd4ZrCarnn zP9RC?vSZ+}C3z9JQN(xVzfGr9TzXt?c^LpCo?iVaCG_{jAx9BkXd|6=^|>#a3Eyv3 zM*ULajN9EP(Ys7zcp=5n)^;8AC7Md2mEQ~FQE@!#H>zgC!aFy<E9$@9HMwgQnF}9g z>I}ZGUlu~5k@jPShH3#a?<wx7QM78c1}WgPRm@kyjP`T^qZk}Vi1ua8{QXtE?j*id z#TOl|XBs4>eQiIMg?m28WJS~#^RQSNgMTshHi8v4;$dh|bvFB-2~P^G8O9k^dN`a~ z9on?`^WGjLd=_cO_JXij#_;NV$cus^HXPgTr^8?qj}*ij4+y#Df6UuO$6O%Gg`0;5 zLlLC_OEHk4DsH%=0e0uxmC$<3QweUOK*I+0Q{3??icsrc_H~_f*`#gV;T!SAm7lY2 zZfg%2ei`3#ePZN}yYg_xFb=sq$Rn%@(iuP-`6i7#*~&fCuRO}uzU!4k$!{m7w4cu8 z=)L)Xqy!3JP&yJcSmiH-6Af9BPWe7H8I+gd6{s=xz5UeGWCD(RmePl|K_Xha5tgv1 zas;-nM@}e^D3=oY%<ES@|3SS*3{Hx~Yuw6+yu>f#%_W-R<qGBJVP$W+vZa$87$LAa z9s<*$B;+OnR;&yDaly^I)@(dT;L4MHm>g-8M^-~dE+*0_Dh?^MDMLOLdF)2uf)y?M z#Xdsc<7`Ne8c`AvqXP*N-&o=m#a-b<2~&J?I>b2OF)kXm$zKE0E#6#7b}b6>g#a-@ zjZP0Q!OjR#v0Dv;xqmQ#L#RJ}tqY&|{)Nm~m&e?jRo$$_e^m}<$8VeYaSto7xS*0! zlaK%9&xIF=7#lVSpX#^djNb8v>ND(}RP48;G2O6BQUM*zzrES&z*2{+91yBtA=9x* zXPkS`S|epR6dohmrN=TLylU^<Q}~2P*G^$1=T<r84*nM(KYe<6ZOdO1KltLlYTv2f zKNv&t43D~o@Qd1QSn@hLF{JO}YZ5Ddvz0qu^hZ)N9}~oFOBHVnx?R`Q|Dr?0X|!OR zj7TaIWxPkJALJjcY9a8_0y3H`Ed^S?sU1$r4ydsc&xV~DN{YcRi{vX~9Zq@FAu$0e z@(V-i&1!Tka}!yOOpmj$(#po;#rWpkw+xNEk;3v2{k#`A&>s@Feq3u6{leEo3#@N6 zmj`O>r-ht87EE}^q9y;r@g$D~nhIZEArLv|%)AI9i>Tcm3%fjlyr%Nt+Lu3}ZZ2$T zYD&VufNaQ;^Vkc&0nWpSFHWV+!7o?H<s&TUcg%Cnc3XXXeS;aNU*;u#c-bxI-XLUo z_^m!Q-1rhu@wjP2+t#8wG^rW+OhQz+RoC8B4NJ@t`cprAnknfrrEsG6tHa$!x5)kk zM(WNK=I%treN9IA3VJN4j1bD-7AV0E`g%HW^Uh92NUqo__M&--LXqL$NX|!#(r0kq z4mR2Y=JZrJ@$cWi60S!NNLYxXyEiwy{@F1MXTO}tBSC0g-cDX%Zi=dCmPUD>StJE? zhZdz1?A@JyS$#y@J;|44p6e+#Ykc*Dt85G%=)gGQ46DC=-JSosiIEiFo=hgPi1JdM zo=4DOJBH3@<>qN26V5=nb6HASBB~Ho0{ax`S^ID~w6$uC!e|NogL^r}1WCX5o1<{Q zDh|1aWkQY7!qLdDKy0+2;~~%rX7i(m)gXYE+`wH^FD2L7Z&P3|2~n`Y#xPPl9K&no zEu*>N6y!rr%9RoqpL&DS%xlZFFWkI25<6f}{DQKs7yVV22Hvs#3^6As2c3kIo^nE+ zsDcSG67WwMAQdmQZd?#ec?PPN%;L7i1!+DUP?|ZrbZT}MU#MI|QE7%e^@z_e{r|N9 zhI8FfF7>xWlGV!&ZDz~7Ak=Sh-+%SSB4OV&AM#N+SeBx*(Di6<4;K2GEG;bsj8~M} zp7pY$YiX}|Q1oI}PF%F#K6vfqcoK{H-Lm%JRGRO|mQPA4PZ!c;NPUJArkZe8m-!{t z(AE}BFUliD{a<3YE3zHZ1S@uWHN>Wng-1@Hxg1%ITLTfkQp!=6DEydJ>zz!UTXE3u zamw?4I7xM6xV*-(FSg6|C{nxh?kT3&5VGvj{_qqL5fP3bv+SVi!{_dt0R#s8{Q<D; zDNMLt#6}-4cK}A$TWC&M%TDeHlx*6ct5^hMxqh`NEL4f)n)g6n)%7eGVb+If5!O?T z&Ws_oEdzlJgJ?Gn<rE@guL2Wp>SRL_rTLg$v?@b=vWQ?a;wSRCGR6{4)QSV2NALe0 zh_Q4WzMr?d8(D*_M6cYzU?j@sUjK?)hCvvI@A-+a+juVD@ZK<c$cC$RV<pK5ZDIbJ zgpF(Te5_uK++0fCUY3$;^7}4oB%uC`jY8Y)97~^q;-)-^C5|JA6NtwrZiAScsuvMn zxmQzK`<PVtLs5E@b%R4^I!K9Y>rf2LQ`~%fAf4?t!0-}cA;iz3R~-aRu$oa3iU-4P z;`T^JiegDKSVHID%@5@VNYpJ5UyEbI1I~PMZjNBNrw88)Bp$IX1vj@9TInl&<^K$> z3J_KVv$v)wy;j#wOGrqN7{f`cuNyvM_WqHu2?7`?0t4Lss#`?u{wds)UhL}mBeiIk z4)lLYGt$UCfRzQ?lW)OXy@h%6qcDboCPyhatlOj8Bbc+}Rnl#4-}j-2OZLH%iVCD< z)(EDz5g}RZ*kL4Q+Kj|8OI3{uiYNg=mB43+B)NsV^JM*&mlbv~8{LOi!MZ?t>a5(+ zp`g>7IOc;SOnRdQ74vy7V5U1y9Id#}dri+a`ay~1aM_Zl)<T=&emm~xrxn#PW;;^~ zC2^d=vU$Jb_2p&$f#Ai?#7^hKF`#&^qjKbW+0E(rh%vf`qd(@yO=NOd5c7P*2iQ8I z<VJwiFaPSOT_kmQ0n`*Z5Q#p9LmdY%mxpJMc3H%R&Rx6Q);YZSRv)*q{_*mgSjWiF zU#%KfaX3*}QCMTO*LAeLF|P}#N8$Z#cVTFxFh;{ZtS_=Ehy*8yW5Kadb4oqUR?uU^ zH+z+pBC4PmVj1x`TVmthmcaKSi|Oo|^<-}b@2s`Tgf&_y&qqP<;!A!xfP%<O3(avP zcb`?a<jl%c;ZCA6>5ts(!&BV?=X@iExe_KH%sa-jAY^PC8f~YP#fc!J{>zdR$kt-| z)x>y~9DJifkkY!$E|=pdMY2I{rSzs}(TOdCg#qn=8qRvzYg%MD#S#rWRXPS9WVrqP z{a+vI06z+HDpfr_J;^0vyp|g6Z(KWzy8BJB$A}=1TEOmrl6W`!O_Zn1zoN{%ElE^G zl}~Xkq%s8Ct-*605m#GRDvb^Se}w+?2o5n*qh?6=f9rz?p-+P8i0gmW&`=zr&8^8q za_n!X<vx-If7mEogFz5ieyxtDfa)MFXHC?Rlf!T1{dN49A}_$(?tMCewJB|@1pVF> z2uO38RhRobvJK+0C~u~IUKB}^H<E++(cVa`L1%Ki<pK7%1(GpK&aX~CQN&kc_>+BM z5sh}$Th0>_UX{?NDW0`V_$LUs{yPO!zB51(`v>D+cTvdTGsU7Z87z}V1luozPY;bQ z1XIo~2p$Co$8@?_A&!)XDc6#2hx>gE7K_#bC6lHP1qH<)pMxJtIf7~6!Gz+J2{;I; zjT~`sl9UxE4`q@V6l2sZ_b&fY_0M{3cHHP){rd<)Nu}(S(^q8UOgBU~ZNC4I(5~li zWx@{+3KC~pk1+{DN?gXaK`bLh7~E{h2vDuzoA~0`2{JV?@UB-fp02-y0a?QwjIi6= z7&ga1XM??bS((DA)z(T^kla^mJM$XIdS>~HG)ib5PfW94gUC(lm6a8!MHx_w*w~mt zCq{4`X6NQ`;9(EutG*Q!z>d`3D|licrd_kU*o9+*lQS;*U<b|SgNDHZg$8OEW}R(z zXhjU=8oO?;CQz&Cu>cvPqOtcj0k<+#E9M-#93@32lU9f@^CJ7POpB>MhP*<z>K|Z9 z%|V7Gc)CtF?Sm^8yr*WCWJ@b)>aTK<G?FT+dT>r943Nl{mc6$dboC#e+rZze_NDJE zZpFg$qdSK7eVORf*kN~N97LtClu!!+Df}wOzWsiDxxM4sNU*JqV-(-_geUu~XmIlD zND^esENm)8;tjEEeW6Vp0BrDOKvZE>$MyTA<>f3<e^3CZOXAR!kTkztHc3C)rVY?5 zev@mT+U*$LwY%)HUk)|Kaf~e@__1#dbO2R>PoJQQButUZ$p9JCP!1JPjF?en)EUzh z_0s#n>A0P%3g}nnTai{(#RBi5C8q+Au2vqnTu#Yd09S#GsUkTGeI4N}9glI6Q32`I zcr)Thkm1|It=xGx=6HPCUQq_O%e+tfXoBO<X-JbJZYm_B#f3vigp5#*lIwMSV|X)S zavG^?!r&;x&Br^nvZ$iSxBI8|bKuLcZp-c;*CEo^#E97WOsK3@o>~YrQl04*Ld3E$ zt1Ny=6_stdJO;eDmMn2@$r=Sw#|qhF_(XXx%AL0@Bx`8~b-!S^{oCePp9;~fLdgY0 zzVO<cAOC3~2VDet!0r0ebu6l6h59lDU78{|DB#lp!8W)QyZigJ+B%|9TBs3NRG49_ z_V@}U-_J+HwVo?MrsM{o0@uODSm1(no<EQ)mjHAb+zbhA8M!F_M(lAmfXiEhh}qFx zkuUf6_nFCRjQEU%vCs<?%i0<RVn2mC2jtBeKl%$14{~Rp0MKL<)b_ISax-vm#M3Y} z`%My+EZ)jTudKXN?Ua{#hsJxl5Ib^vH^x`D)i0K$R3dN1wG}Jk7H~@0kcGeFcZT-W zcU*uQg4n7x#jRctfg3i<EmJbtm}M!2cd#tf^040jc;EBjZ8f&cADjsJge(KXhRuH# zEBHMe?3`ywVM!f~Su9}!hj)tHKzeVab+2DL7u-DIoNnM)k&1!9Wr2U07MVcGhP@O~ zhIvqAOgxbOefo1Ozusq81APP{8S5gvc=C0M_1@wDTFg&^IsX7Zz6Bm`Q}AsYx=qQ{ zgo@}5PG7WV(wgZLLK{Boug-{6ey6Y?om7zP!>B2Ee_$k!`auY1GMQuhXQ)V!>iIMh zXujTd{tG7mLqXHp7>-8dvg&`s@##0qKmrBY<H;_*_G5~q-BW!sCYq=Y?UqzQ`7NA7 z^AT^r?Mr2^jm=g!2^R^E14~R;nAK@dwx{03KJ%Z;$<X%Ghm2;=XSiAoNlB#PF}=bG zY-+2ZNw?1HA86id(cf&Be7R>-vJ}S3XuMiOXxE?kbS|#*jQ_P$Jtr~b`6he`^uVZH z2$etNU(y}2PqdToo9_aha}7&u;LA-QR#p9>sWcPa+!+@?aRiPoLsLUTKSC!^(~pyG zU)=Hk#9bWe5wuswrbBhn@^~Mn_Ou3gMozKY9;{{{kmTR_>S`{>74ydq>%VOxqj@XP zi9tg-0rr}L#@ZYN1Z)E<OlaY7P__aZ#|a>9^S|xhaa3ZtKyB+FV?~B;#hRwL{vZkt z;?8daM<|tN+VynZ>%NjGyrI=E_8PTAgr19J)bOo=&-vrck0z%Zx>)_yrQ!Oz3E4Va zbXyX|*C}g9e8!t4C8{nX8<G0w4@CO+vA(b*!#(Bxi;mjrC_$F~cqg4*xp`0bm=4}f z9J3$z_rAL>xQ_k>0d_RpJ?Y9{^zVOde!WX`&GbH3cs%b4P<s8P(04_)mM-G(^pSb5 z_%j7?%KmTO$df_>+X=*sYiepr>FN>zSv;jHmAk2Aj)?E|;jRMyD~ymJkQkl|xTtC> z=T4X8ayub@Vl4+gH4+*h$CsxY(60YAn<|t6FK``zNF4fW9;zoQSa@f+<1xs1p&`n} zsefEX-a>UP_4V~hN<dl12_9h%Ajf>ZGI>b@n(DJylSe4aK%ekIOYlA|k3@k$!e*Cl z#V81L&cTiW7hmEigwpd~9(SBMq}|OcH+pvkLA2(%J}t5p&OHwa@|V0mrq==3jaq~u z2(g4`9iJ*cG=;u)J^ap=wBiZZ-}?U04w2!DG?i%B%Immq0l%=H>mOBFI&VZfxew6f zSO0?zrgefNQZAG4CSckz@<F)~ZA^Vi5K9Q{ythJa!zf_*(miJNrbM&YgKDTcR4mxo zWTXg-<->~5r%cf&E;Fl2wFQS?>CY79g&f>a^|IfoL}l{^Dp07LHdnLkk2Y151a_3X zYxGeT`na!CB{JJ`<-sufJYsUS_?g!WKe_|NRr8;A{|6MSib@SJHack-h=`wx3U{sR zRWE&IaU)@%;lg9tJS^|)qoC3jpb7*PXH%iN*6M8-FL$;sEotT^zfJZ4l=}cO1hD*O z2|8Hl^7!oR?BwjM^y`$KS{5k%mmqp?V;uP89&lA*!T}<!!F7HIM)O5G!u-`8Ida3@ z5kZ|{0#M^MzXBz+QYL%wL1i0eFFSaaUMiwo30|6`%Cgg#*wV%_5JmGH{jLbx6iPYa zk?m+&cGmk1?^7xkH-m;AM{K_(lW^r8o|^Fw;jb{xVo?o=KAa>b*X!N=`<QETDFpV? zxr#LjZ!skazyx9X9z~dBdTtynUbQ@}%L&-rqxc<@y+qi*`dp5lYqidx^)V8|`ezT) zIs=~Y!>DWf^ZCfA@G%!X3q?&%zXASi9N|QXMl=vN1B#(11mTb0#h78>(-ml{VzRSI zSw><A%1sZPUv36eQdTd7vEICbp8XUC)qkMj`!N1hz+i>(GYb*+h^scOi^I-nmJ~L; zq3=-xlubPIO=Cu$xUg|>_(#-rivSv&O)#n#*VS<)(8?hSF*(2zGp69VFGItnp>HZ^ z6nB9BIq`<duC1TxxrU><tfrQ&gDq54J&ZbP*%Ad_KKOv&iUe#`c=@g%8FDyMHuxS5 z(J<u2Eze3vmdw~@)*HP3f{~(JD&fnj?C{eI^X^dT_qB)X*;fIZ^ytC}!RBmQ>>whq z$K#>F=D;C5r7RCPUkZQjPcq`3_UR5Ih41Ev81U?-@ZY~p0q@S&|5Sv7W!`1D?D*gO z=Rc-KD?L#p$BhX9m(B0PK#kE4?(k3saEtjcnu#Na#XP9TgV26JJssQuRJ8nCNm5Wj zMi!8T0mb4OuX<frna$h6fQF_fFxFYziv!>fn(8}bnGCvKC>4?4m22k~x8k{)1635b z364Q^9Hq)%pi{$z*_XB8ygYe&^TA?(hLQ9lQTZh~`fZZMk?|#%Jnic`!_NbA+d9bY zjtuB}AdrE}oH9h@sMv3`N1MZvS7k-!w4Z;biOS4dNPR-mHN4P#P2~+=ge8dGQ4;N; zU7)OPtLe7nmV(I@JU`jzkb<=lmGv@=^u^#V?~ZTglMu2<{pSKIyrc;t{o6^r_UFHX zuc`c5dKnHU2E->*<Y&sW`1eQ;Ekl$mr4kG3Cd?w8cb)Uh`XSnXoMx1774ul_XHBh4 z?bYZT7)s&<j#h66_%cO&dBH<P13n2mpud(^Um}U&JxB+6V-Nvr1uaXi_j}*CfE;aH z?8VR6|4KVw74vnnQ}k8~tu)>`l+*(?ckFU+M&R+Zw<$(edLJdb6f{LZN9uRty9yfn zznj36E}r?0=~WEVvahW9I*!%mFmu%w*u7o@Ox||mvIE^``M#yE>iZ2bOiVLbX*g^& z@S<zD)J#H@x1u5JR=}po(Qt6{xj%N##poGmNUB{0P}3C@cD-U0^Y{596pZU^G_@2l zc+iDR1F!i_IlBVZM1MQ}#cf0^`C}9ZqdC?5^ly1+mb-eH25FOzk2;yhD<KBm4c~0T z7Zt)?J<8HJxe&Nyjhs!|d~_{@qDTqXu*y%?OdbC^2%G=_%tIyEcTXpQRAdA4#9b~0 z?@4IBoA1c6W)x{LeFn(F<N1id#VA*nSfHrM{d9&G_|7c6Yup4WmgSNE!vseUOikd( z0vrM01L>?r!@yLc7lq*~HuJKU>}kr7rCr6%qBRvXYPxPhbc8NZIK(!)<|zKS+(w-M zj3U2(&;d=EJiT6%1BL6(__o37y$*S~y@SICpcyQK#MovBT6H}zJ>w(|S>DUs(FrD0 z9@Nx*B1YVEBc0*iG-n1IHa0fYCM+5*021FwZ#yX-W94|Rmg0zPz@D8mV_-RtP^c== zWXG#l=pi%_m!hM4eWcp^3+M6Qv+v@<5-B2TSRc1Lw=&Ha6{m;7aJ$i)^XMW`8HWiG z8!W9yJB*cVS!2Fa4O_(sg(fuxOp@VSDXfB#CjHA(sVMtd1&sQg7Q=+GFMM<*TOiQe z66DuI+4-0Is+SE=K+Q*+!hZ-fP#K&pj0eew=a-g7P(AI+fmHjid0;4To{55jm(h3( z*UJnsrLyDSP9B7B{<tnQj%8Wrl6(tdzB5p-=XJ3QrCy7oO8`TE0<`!7^v9lgSjNiN zxR)KegbPybslk7R1<<{9pn=!~{$`6z?t;V)`UEexW$jqZn%$izp}2&h{iueyk!tnL zsy~dF%(90vu^+(V_$0d@y^cTKQMy9gX8!&MeN0(uI0WwS5VFaC>5~NED}yH^BdVff z%#Pp9_i-ZE@Jv(R*%>s|pN%h{a6V5;oqejSXGVRcb&e28!^7j|>7G2vgDu$q7dO37 zlil>iB5`YOIbbaPtvxpuRpZz}!a&B3_aj&W*n&1<HG`Bz;5z{lLJs$jnWZ<vZ2wkd zC+IBne#o!#V5=kh`1lZWS|aNjxf1}I=YRFXW6=sa<dgfI_CSA#BZ4ar@KM8?3qq{) z_0qxS!^Wa@UjIeAUOa>1mCp1SfDeHXb&wz2;wkqWU1RU?zkiLV_uN=E%fQlyUm0Zh zbiLR6;71dbL-0E7LGlKBA1!MkXwbeBoUQz}Hlf@yKKmv7CgdN5sJkQNTNiiDm_yEA zn_(#Kwcras&@D=nQibOx_i{~i{QA`~kmT^uyaSy*SX}cIKX{e}zrZZRZYic?p;K8_ zlep>SnZ>v+8;jS$bStTqz1o^M)sAQxL+|NtTO4r*(q4g-{*KQ=dbkq!_X<NdQzc}> zQ7y0s%YqBcUo8F<583HI<5qRuAwC>;sCIq#2rJu5O-%;M;8*~SW`G}}ky_}beG&8B zp|IA~u6#LJx|-d4oAUR+FnCE-d7B7$TNFdJm{UCI7F1-~7$1V_P}p|Vn5e&H$cl2s zTX3i?mqGH9;2)naqn1nMZ9kqKEb=;bM(JtP73DJ{C!V)PKjis)=pPuJ_{?93vVq#_ z<JM(1SuK3Czxvt1zv@<AppgdbmPMGI0`t4iT)^7`dgP%i6n{YE)$H%z&~=lKA3sJ7 zZuV`SMdcC5dVz-{X2%<yLNL|5h8U$ga@?Ny>}>``NDx({)4HUJ&{2IEyY#OYRE$rI z*ngLnfW3}Vu5eb1>kcO<j=y>^Tg=6`gm0|f1KZUr2T5q-=xrg2J$3pm8}{j4EnmkD z_$KGFXugb@KVU*gwaV4qQ$miW8XH3YMdKx9N4#<ybwg)SE5XW5+*XXTC58lVDB^1; zLCUR8tIhs+04b^Ot;8fk3>!{@s%OuDtcHjeb$Y?)&#Y&b1iAQ@t+n*=#6MjnaLOd5 z=I~uqVCz~@N#^g469b8@wlZ9!dux~b&4G(T2H5T_wf&z&4k{5<Zw&AbM8UZp3FI^A zqM{O&+-n4V5|C568?kmhy8Le|r7rI&4*DTIj}0}-@j>AMUmkAaAONqugn?Y7sJ1rQ zPjsT9suQ&vx={ljS=*1OxCWB_U+j3_X=`iat7E*ulp}YBhr-~1DG9Lj1uwF+1lV|e zSDf;9iS)ZMbf*g1Ab_3|T$FSx8I@}L<rj^)`hdd@M%_qMu}EI@kgcIKX5I7qgQ~iZ za}fEF#ab4C$vPYLT+>&YC-047ld%U$TTwt9>q^wbb=}ET<seMiIK9|#H1=A9GU}#l zyXs{_#C(6xxny~@H$Plx(a+R-5}gXCDRK0!r@Y=^O8#xgch>rG2~7YSPCMA}b!cu` zw^FuSy<I;c(<a!G8+^XT=Ua8dBRC5(R?Bs=)hE33qa3N#tF=Tawbd{&nb6iX>i6Es zk)!<#m~pU-44{L>*Nc3qcr5emFYKqENjM}KW-i)|%{#$TD-<w=E`UHU&E3V$1?URv zz?L4^mfC8LX#Wm@Fx4)y)acoLk+*F@*Aplguq&RMn*&%{u=~O90!Gv`FJXu_<+-mE z&S^{xDk27H-w;FI=t7MJ-FC$3<GOR32G0*FUopv0;>MmN*_q$J2UY?*W7|$1@W24j zw?C|Dp#9EXnNAWfpDB}rLOA2Nl4U67V==tU3=SlCTT!r1U|JSkri?f{=EUnZH<30q zzcsTECzfI8Uo6XNYw~sc!K8&?rMC19zVMhhF)6})DH9=s!@$t?`E3mK=QvHqEj2|P zW25<+A8_TF(MK(1*#ib6>4k6hdCl*^Nd$HJ{LYVl#tl4ofC)xV9<rR(l^mo$G?}DZ zombslbj6PCx3RY`0q-*C1p)daU!oC5!u7wx1y*dK@Sm~I-YZ`FB{07fl$5;EpkM^c zw{`l6Sd@R5UGP=xe$G`n`5_~XvahqJDNg<QGYXg)pbL9NnK-k!s6hK!e1=<4NJybX zqtCpCF_|~u(F;2NVDhiQ0NSz8HRIs8RHNMJ_s5gLzp*ab-_8w#faE6>kQ@ns#fq0K zz(!bPVqz+TKw_9qx8J{4(EgoY%B0`q^WRJ<#XDb5!f#B$=`j}Xz5Vvo>)*1N$XpO8 z6%;}Q;i6~VFD+x5bSt}$Ao-J1GWOaSjatq|;f4idT;+7yRA!9%6_!gEeRzl;l;kd$ z-n^%5)TSp?wOFL2gwtkp^K`2<ySg_<am?LOXCWNgxd0?FA|`p1{qonq=ey5;y?lLr zi=W5?*npeH0!3<VVw^>rh>y58t}a-%1g#Pj&sQICD^QC<oUTp^-Q*w55z5GWzWfIE zo^mBZ5oNMsOKoLCZM>dO+h71Y@!|3I%x_0%HM&r>)Ye>ICv_VMtg9pD2He{k`<=;j z-uAO`+D_9~wx27$R{2V7HIa@+asnZA6uUMKvu|sE`*fbswFPwV`9&2uMWW8!L;=@u z3Bqoi4cZN5G0|BuG;SEntmY6@jS#B`@&_tw^X<3i0%UaB5`wl#O>I-cNXo_HA*rlh zus?cSj9mKR?2ioYo`DGW9)+t~gsk|TB!{=})yEGeUNqCS*y-U%@^M}W2=lM#VsD*; zX<^ql-K=etbj=%@Ox-_p*WC47&DX8oqAb&UM=bs;Alw58pBE4kdmYvcLMNFPKx-71 z>{M5Jt)|5%87!V?9g+Yn@#v~Wk40Af59n6Qf#=hkZ(niWI=)X2w_m>PR0Ui7WW09y zYK-iljfX~e1Go@x3T7D3882Eo^-zP7z~|{|K1<M@3F_G-6^UsD`c3r^Jt?XG06Gp3 zZ@_l^ugiya`VI5OBY#?4?~XmY$QJj&L2qaQJLbZaCnf^7nRMt*;r5nb))xkCgz)q2 zCRA?v)oohg5JU+=ky9|zqV}=_R1=(u;#BV9kK*e3O=etNfTFhZjQAO$Osrj`w&`rH zLnO&{hP-Q?a5?3VwOZ%=hxX*VQRFOlr{5jH*XQVR`f%|J9@O-S^hVawz-Kog?ida` zd%$})@asJZzEsf0CY{1-+y#ejo+{Onnx$oM=qVZ+8vOo!bp?pzW+MtcV2|#!*Y{=g zv{~Y&;oRKZq?zcqpO=sKxu~*o->aZ8W+c9uc+FPjMmQcN8K!|BQ|L4)fkabc3FdQj zQf@|4?vX2wkvl3$WU#LeZ7zY$F5KAI*p&Cko&Wj{5S##HT#bBi9aNl+ht(I+yt`5B z=EK^NTVR`wKXe>6cth3~5N6-at<0H){=b>wUzT;Ius7#?zzwNvB1vqB^leF_29xgr zY((x)PkZh;YMjU+P`;@0{L@jmN>ftP+}y3EQeHQHvOqyH@nRJ1!$$Vg=-#(-#GBEQ zjVF$_CGJbh*ZZ&gmwHi|Vu}9sy_kT{uoi?Fz4Z?q1Y$}jfl~a-aK3;xr+e5<tpqv! zyZ*ZpoSkkIyy#amCy;9%zgs8h#vgRQG5~6O1hfLs4%B(szDcJ2?i|Hhz@x#=Q_O?y zC$e8=H9>kQ2F0YGC{@}!Oo6#=-ga=@oJ_mti~$Lnuvu+6lx$;?>GZk;>_ON#&AC$; z&F}5+Z;bJ+T3#P6LR%W3y?{U<WmQ#!7s4(rhFkP}fYJpUIe;Y*JZ`^G0pjJ}!^OH5 z0GPJyLn>fwK7A?zWV{yBoLJ4iTyfjm5=-D|0HvHBpKrRXhg07OpZ}r*;9Fxxv6;Lz zdda_EOF_eHX8+x8U6PEp+^8DzKG{eszkSi`i1~&6*z*5c0BNOOdB$QM3T+=`Dkg%o z;;JI~*h)i&FS=Ehhre*RwSE_^uj7*^6QJPkDQ54Jd0C&CV`hqmx+&7ko6V?cN7LDV zHO&1^S6)^o2{%>_f1R$=_}y6My|#ea{n_rBX+vREu3J<mY->`N12N*<oCpGCqjkl_ z-DBi?of|r-M?XHykHFSr;q$S1nTRh?A9Dg47ku^^<`KcT@z%=accD`^{sE7hRCtMl z0$>&{+<ZF{L)+8M`_2La;RFaCA&Xx3^TWx+TabxG)Oi|iuZVQ>F5u`1*}8RmWKX<m z0+82#|Bi#9d~AfRYm~3+PWc#sp9ArWk<{+r?clUN{#8`y5ZAoacq7YyQH(crPD1$X zPkH6R=dOa&o8C8u-*~XW%qmEzU^m_3Q2)cg>*DV2kk5}FDPfh5vE<-g@y;6Elv0jr zo?z_QI}i`NXO0{0kh~TBhBwCAqA>p*tP0Nhzi9R1?H@8MzIzBNIcEyyuN;22(HQEN zmzRU}FUKv<t_Khl9;{#Y;q0dCg@Sro<kDYEgW%1)<l&$k+4@IqZ!P9W1MN9^TI49) zfnl7)!6NzN*>X*=+yb}y_>ZqhyFJN+u(B{5=Q)Y@6mb1X(zHE5eO#oGw=EMnoU=O# zo1x)yy=Z-r82A_p6^TPjW-MDLF>sQpr~t$EjiTr=sH<uvbkYD@7H6ZPRYC?d5Gk0q zHzUO!X~4F&BilE^D8-PQLakRA?C^|EYp@T~sWE4dQa748N9ORXWhn57I<G^I@oiQ1 zcJElv59X5@`B?(4Q820aLZ+1e3;Fz0S3>&~!Nxg$aWJp1^p)dGgPi~!zI>xY>5#ix zW8)0AYO>NNuRD*~L!Ha(vHH$CrZ208zi^N!!yGR8bGC!~T`rB>G11(PP(_u#5sFGC z9Qn#*iW8C+e5!1T0MqtG-pgIyl#8zSRnhstJrt>is$&3gDaM3~Gv0W9_lRi=Z}uP9 zO@xj`Tob}6*16shRF7*&>e6tce&w+Nez&{Kh9;ue5up`U`cP06ndWwzEpP}7@qZ4Q zjWu~_&K?L)S<_I3_M<`t><8R*SiG`4js0?cCJI`2aSoW0oLC^?`8v0mMmbuGgn>B^ zV)*ZQT{mw!W6NPG`^LAyLO&K&G}I5zR81L!P4t$1X&}CDdC68<!>X+hjW8`&wdiBg z`1T}k!|6}|8?MflEat99t740j%ez!GHzHJo1c86V$1OXQfO8v%uAUUi#L`B-Vxb3W z=&r(FgUAJAhx_}I^X{GZb5-Wcya4n!?(4@u69hCR!1aQtldqv)3_!B-!0(?Q!b&1Y z2)OGuX@s_`-v)Pw)?y=2NXC8Mh^S%lTwEU7HsI}cGWV^oV&gwR@v~4QEa2aGhhm-M z{<}*{zSR8_8BCq3aIou#i4XlD2%`^AIZ9=p`c4|1mITXY(35q7N3*r#D$C8~g?pa5 z?g_$w{P27EvTCX~19QG2AlPUpgF`x<!Ps4r_n?{}xXYgVc;Wxu=S&9E!J$-Lyil+2 z@3idu`=|t!>rZ8a@4FHhj$30x2jaIs0XFDveEjB2;W*$DB24)6LiqWi>*Y%?rcfL} zlw3Rw=ey$0U0Pc!xx7wIVE}H=YV3Q&1GrjQK%rFG9DpsYmUUpR2=<ajz-4MV8z3u^ zg)l18ubw%OcTIlAk#rj67_4^N(}0RpK`T!p;^U@OT(HU>(5_Y)hSQi+<$v@^_~r2e zssV|=OzTD7<~@1`Kkh_)psN-VW7a5L7DD%pax4Wj5+MjxraQ6d-#-@jM5%8pjw+?s zTg`OZAzU0k(j77DIIpCcY^QD}^p6>oWk-C>q|P^8E`tP@euAPI!cIFYcJJ>o2_%a& zh_x6r%hF}qZ8jZ0njMV1Y?ZVf_ZrnD2syT-;YcCT)aU3{GI?VE<Xi+p4N!oD1J*xi zkSg%2rm9HV@bK_%b7uv!FPw+<Hb=g$+u6S_j{m@FllA%5kZ&KC7Jj%LFWH%XBsz&C zSUdpsga5$Z{!Wq<X0#SQ7{d45vZ3=4R57u<`kW43l?IHHsGv!+8|nUPdehXA0(QSS z$3P<0#QoJl3t%INIn3elUModiDn9HX`||x1#nmB1OUeDY?Ew&pz0xn4e2$c>4}Wif z`bM^@>~Ng=G`gHL22#L0DeQ#IJpaS2=b)<Q!x)onBKbQDtL%DIXG7fdv09*a83H<< zF|wB}NUYez-nU%DX(^v%H^KNqTl^RVE#-bKZH+zriSfYnSMM^+yea$5gM0o%(jZAR zvqZIN5gsx2itZA*rGC#lxHB#gS;RmUOcHza-D!&wVcl^j9w2Q1{%N_Ke%ErpU*S3E z{$#+Ifq_a93toiC6VQDF&DUB_C^!$?8j9}?4D^9{E09zg`s|fJw{96@a0NO6KbL&I zKrmFG)~h_j4XjM0LF<$W5Yr*c+Q2tg7GW+5nJ(5Fpnu%}uK`%CVvXka^Y4=KR>j9n z%r%<6VxPsOkO(P)U$$oL2z&8Alfl)-Adbc#8&h7;`F!0t=4SU-`u$Y%6$78sbiM6u zdTiyV5~dG5|4>eonmhZjNk=j|dvz<H31k0yBmJmMhp6{DYfWm0{`S-{|FQf_qF463 zB5&Mm;TH`xxnY-d+Co1<zEeK(!yI@Qdu51>`mDts^q~$DjI>0reSSt(1m7B~wg0PF zK8!Wuv;N|5qUXNN`w+nMIB;{hybk{+jva%9GYpj2ufPP!C9y^Vcte5J`TwN%p~Zs@ zN{>T%OwiP0fu;K0)^Pw#fbUATtg`YS;AS_NP3}+$2nePGBopksTZ~O3RpfzC6|}LS zBL}RHf-vO{v`qeoh<-bH+(p$!we2@~Zmt3?P*7-nzoP0NPy?0#T&}Qvp|N8|8&;pC zkkt9KXK0Zz4e=eX!}?BF-iUvqh@>nrIx%;U9%sU(ee3)8HU_n+{|&0HE$arP;gzcN z4${s1R*|yzcQZB-*X5Pc=8R`pD`0pTU^{*kK}%<2D7uXkSrd=ZNKQ_&J+V9zGq%|1 zi+*$&Cx4Ae6|*l<T9nh;n(f(gFM{TqW`QP+LkT2UI~SRy3ZSlnl@vax)Edkg@^64Q z6?FX_3iZ-RMO<odA*amzRJ7j49B#v?U++G@-Ar`tC(wmbz86<jf&Ph6>6e=wG=4W` zZlYR<*pib|Q#~ZsUxQPV!SyDe;V$~6Rs1mDM3hdxoEv3NwW9++3a{H;;n>-4LKT>t zLDY`R9}CH^Y>lx<6o^sH^AIE`rGyXa#c+B{_SPW?nZcnaU_v)Za=qr;^FYc)-X@hJ z3;I1C>O%ra?`63h=R@D-JJ#=L)64`33oRA~#^34vcnfHM0)S-@fOvyNiK4@x4WlxA z_vX$;bvpRi)9%GTRTZ^&juRP<utMj@20(SeR(&|w=aKy=09>1_z+48XXuQ~dCvpbJ zHP|EsK+~Tk3W56VMq#BO-`n*_==cY93IWVb=Tz0`8Hf07!pM=<tv8ULK=l%Co}R9N z*apw}%)7l(Kip0_<oVa^%>ky(c!-s#UoLp7fQDkC>l}BY<5Ku23v-|BBgqnX&}QP- zpO<u{Ng5a%1ao$_pUl*Z=-_OYr%9FmXoZg-v$h}8HjKqLqv~~UvH?>pRnh))_fLz} zR$O#5@!Y@XUG}3HI4$m{`e64I{RUqV@LiV%9sS*0xE@<zPOOax#|y&-&~q6s@+Bo; z)I0e7*Sp_4%r@>UL?|F{V~z=cgpQ5=SSWdN=GC6Z+?+vYN4I@M_vhvpU82)oNyhns z$xHU$%(t75UpkiT^P+yJt}Q4^W=zSY{2xtc;T2WaMsewu5D=vsh7OVL?iv9FDUk+| zl<rO`1*CJNyFpSw8l)SfyZbxyuJ!!`E@yG?J<oae-oK4G=B&Z{Bh>$=|Gs}IFabnM z(*$Szyh@h_SV?PIZ6sk_L&d->xwefjnO44sG~`&uDQ-;l=)%ll%n+ARsW_t^DC>aK zI7Yba6#*Gqb-Chf^pD|k+~8pbr`C?ma?k6}L;P#l;BD&z=l|4CceSOy4Y?Qh(fe&N zBN9w8-<(}s?CQk9(LkF#5T{xY*1IO&zVL>Se$^_ZA0x>O%%!y9vP+s-8(Ujj0AU9_ zXI19I9~T;(n*j`D)c)M`P-e-2%-z!$ekcvFH$}o}0buGyknq5od*9$Shac#~^s%x_ z6G}z&;g@U|jxcTcY4mQ61tKNW6|sw`oU^d1{%CtZHY~2sMJpMWo73{ci95)SL|&}? zv?J)CWS_|)-c9DK>Ol6g(!@8va7CPv*_6C2(IDLQO5&n~FhnQU&7$I~PtTe~<@a9X zbhA?>O!-r6bI#Rz2o$7m%G{NVAYi<*>ttOhzhlIciEuH?r#L~N=1hW%#b8WozL>SX zSKaS@LS4tTz8aL_wFLK*=793CoM=H1hj*{3h(#hv%N-U#sHtuklc6e4qX{oXqp);q zMoT%u6NkzWNIfU4dJ%Zm?u?g$7%mMVFy3(+qrFprQh$o|Qpd&#i_w|QVn#&a)TZRg zUnPtn;Q|KoeW726yMlXknh1VK@6y%vhQ2tFh2Yc5a=M>wF=YdcUSM2<_uf6aPM@Ut zFNd_>zxKDbLML#+-i#AFAUGIx^_U+F^Wk4TJAdna8-1_JfmM+Mt>d(0OVjoO@ohMy z0Jz2-V!n}pFHDwx@Kbl8pK$poM>fg?T*gL^XKeT?*ETRd3i(IKvHo~MEg>JcN^OgU zNuk<9!|X-i%es#Loh+&kQ#wohHrRQ&i3uI1NknK9;l}M}hst7i?J4>a6S89^pBG;! zo>(+a$WtT{r2iZSW)Qw0NS2orOUhx^P3!=n0^=n`0r3S*FL7vYLr1VBi7c;gaOHb( zjsn_=x7a^cPv{VO9bCeK@dUYz*Gtryq`OXlyX+#MW!u~HgSy>($FQbiy4Qss7?Qsg z&VDl{X`x#V#1molE4NH^2^=aZMGmMkPVqCI&_0@PFCxseK<upwc-(C0`sy%(Y=JoJ zc$^!c4y}B{t}b<?wDKMyaB3f|u})$Siue>U42B_|-HR<eC5zyMuZ}A`ha!XYxS*n- zt0s~#f$?m!<AWL$`W-krK%Af%j1J;4e+=6u#(I&AJ2LTTK5KWjY64sj(P?3Eaio*= z>9sI8%D_t^9bK0275t6Jdb6sksxH@$4b=7YUYrjA3MP;-BxvH60h#MzWF!2h!b9CI zxpNp~j^RsBg?I-1h;E?MgKdtwp&{i=K`h^?9Ucr77QU&wJRRyr27P@@o~qpeJ`Qip zqZ2-=ztae!p|6lmNy+#7ZIiB?k0l|V82X(Hs50rBK-C5R)CZy2fWT#&*KgP(!lmD$ zD3k5PI|MR(;$B#G=jHtiECk|`T&Y-eRF^b1uW4b;{v+vK_5rpvfBQ8`L!Y#ePn>{V zQ0wMw;%{3L5Z_1!|HTSWtl{nbxA)1$Gt#ZFE_TCKG60PL>oO0VQe#5HexnyfguF8J zh5iwSiVUap=;|^FuTgzzKB)6)+)#N669!r>Bfw^x-m#?k<!bN!id>`Cct!s?9m(JJ zNGM!QJ^c06$G#cjz(F0YNO>1*@mGqdUW|i6ds<#f%E@x$U=URU3C_-79Jo1T^x>hk z${J7dEW397^b6R&s1xStaPP?xZ5%et$FasFB?;jrCMLGDQev(o&mG40l>daGt_T1y z4cOq3xh?xu*VaD#tQ(6F!2_3dX&QX!5GMH?U<DbcFz|dthS7sU#wj{09pg1L2|wMw zU`1T*k!KZSu;g}SMy2a#qD+Dv$y9_1;g}FY9LkIjkf4y5xX_#{-!lb9t*fH;{$8zL z;b^U0oZ3eLCb&!#?lQt8TA75AK(L-d4d_f?`?pWnVn-jz9i$&WQnb&aKOaL*>-4^( z-vYn}4=BHhp`tVTYzT`Ep90f1V0Hqjhl8=y{!C0$Y|CSHB$Z9ZUTV=cK{x+NcA1Q3 zKTV;Cs-v6T3vXhxR80upO0xDd#ihf^&-dKs^{n`VJ{c*lrlz!#=zuxXSSqI-`0!A* zi=HtDrZyn!gXrG@zUsalN|qMczjt8Fs{$&>12iB8p#zcH_&Da%=gEZy6%UVFJ{dV* zpFU9qWKkORCJm;U15whf65>3S?&px!5to$t4XoJgGLZv~IfuX)mb;OR{p$+ucdd0) zFY%>B6?9Wvz-)z0#?J{coQ`poTe336OR${>I#rno-u<)(e(9$KH9H_00DP;)I#aQv z*5Z55yU$I3=X$ObW2E$4lw%x!22Q#niP~}WR%sjH2KlnRJ9v_eDULqV`-}clLQY|Y zKT})q5u$YYz_Yle`*bR}D;&I5z|5#FS4r6vESdG>Oc^#Ta;Xm@%~SS1F8CW~S?ag7 z4GrJHFFx0ax%-xx)=xsSZk??5bU>%VbyD^mnVwLe@B@jDI-<}XMEaduF>O1s5tc-Q z*h@u;B%zA;MXGsnnKo-7Q_!32h;|vH94gw>w&X9>^wQM1txB(a?sp9lvcCp3bx>dP z(?*UY4quUy!t+>Qs4#$ej>m{R&#HR)8M(7fNJxlFg-0=T#*RDTOoIqt21<``{$vYd z+^+ZGj6lN(t@j$CMq*~jm8J$oL)L*wZ0SOHpL>%p_jQ8L;gZbNACRQdZS(fx*lcSy zJU8uSa%}~2A6!-k(cOE#J40!K`%)k$CM6|3?8H$b1@bZO0o-vgkR*Y*8I0yFAJ!y2 zs#)gu@vL5)@)$YxX?{6vmu)LZ<Y@DBW}6tnpi*Q^%InxiL<x(ud3>LD3YFxg2*P}l z<$xV_C*CG;_j>tO6kICx*`FUf+*DlBq)jIXnc~r90oS3-e9689HPr~F*jDU{O$(#H zBA!gt-!gyn;!td&xnPxnD5xGmO1Qt`@E6HV-pD7v)634JNhEXLQE=n6#CVip)fm56 zXlxYZvzwn*@-JH|T6h(BH)2u|n(!5<Dsl33*>uI;%|iW3#vzF(;AaEI?%+q))5-I- zfMDCXQRMvjB>VY#{7z2rz22k8KoyDJFXgY_*b8VMLc@P!$V7j!e-VR=kE(O4IpB{K z8V$LP_Kyjdmdnn`N_fC}$cUV_5-s$Y3YR{^?nusqLBRcRw0*1%xyqX9c|5K;uzxzE zQ|s1PO&+v1dwZfYy>{8S0WzZ|`1lh&MR3<3#+xhM^zg+JdBb@ZRjHE4s@a6|BXgJ- z#(LGF_TuG)`kUg{dd5N$%ax}^$V#GzrAAG=;I#k1-Iwyp+TVJ|)#8yYFtN77D%9hx z-s(b7`Q4W<yrp1Lxw&x%dytw1Pv`rqOk)z+^~<YPN)^Inws*3^6frcl8wlY(^d{Ew zeg|0E(%Wr|=p^-`5K$QJTg!2!S{HNmd!uKq;x<aPGM7qihnM_qn%grM3}>HhI(=AJ zSaMFvH#FwG_eeI<`i}HKuSpWP+Z=(xc5g^&w>QMMRcRB?!k!&?BLPcOR<`oc)%_uM zSqagY&0R**BYL~U_NQdbB{N-XtQ&~S*=)q=);gw_pZ@fPNVrw5UnzdrhD?kxbo_)^ za{41PYvf7CpNMGHbeKCV`=O123lZSmT^4p=Q=$M)(S~%_ngdyH*sPh)$#^NPb}|TK z0~<b%%`_(k5N8&=^zN^G@n`MlYIFJq!EQ{q)l&dO#3H};)o%Vd2oGSn)BL23`sgoy zEVCSXlewI|nteskeTml^bL2(1Bp3hddZ5I3sjwuLhI80^_%J9A1A~d3>3!H3>FBd| ziORZ)qr^`nliC0Yoo%Lp;&%uTluHWhbo~_%7DlNT^d9ze9}pD%r>EH$L)!K;L`9Tz zHuN{(QyuW-Q2>aSLH&`>`HPE&#nzdfQIUSzm<7^`&b=YgL)Vbug1f7Ik)N(hl$!V* zt5i>vl30z;cP2sONZ%;8xy6%#pL1uBTJb|7AEsNWvzf`w_hwWC&wlyTxh^ukC~@`K zszR>KaYSzjFn=hcb!r9^f0!`|uung>WK@%R-AbO-y_?NuSuwc%WA~?KdM4+uQ~5qk zv>95!_YLDM)L=WRg?$vpo3pSOY?lvZ3$~Yu=WDKQQ3h2$E4t=$eBs%gVB?00O>!h! z(_3D$-%gwuzvsc0Ebr;^{)tgcuWD}zxp38G#eT2=p7FX12mw^r)Np+{S-0In^AbC} zTbGsy8tG$`OBf(J;6M?&$@Y{`Wq$lTb9h!WGiskG)Z)R#dvv7#9QsNlXt<|l*9}~n zEbI@#r(5HlVK;RMr7YChcKsR)VGKp)9G~Xw-1R-n15%LTMa<G^S@v0O{W_1p-(r2x z_4%`J<COPlvH9M#1~0A+-Et1PcxSvQEPGX{uNEPPQ%FCFpL=w%a3y*8Zb<l4x%D{8 z{u6McIsoxXwok^GPIyG<T>R?lipe`eA#iIn?G&ZHRC>Jqlr>PD>7Ov1)sn>F5h0l+ z?hF+HtZB19-!#4{AbCDFlt+e?o~Z{$<1OnFbYl0bekqNB?f)Wc{>oMUnc}0Sj3OSy zZA=PESE?hfqf+^uEaEx4*=ar>*fkZElziMOM^H}T#lZE0S-Op3EQ(-iCP5q#T3Mlq zTGd7i`5*M=$Bxr?vn^Y8BOXC9X3uG}{A0O2AU4_DDwENMBY0saZ(UE{N`1;5yCppn zWX+{b*x!>$g}VFHapbu)g?{L8aak@k-5SXv`_ztbw}R_q1TO2~ApVr9*}Xv@mNQnQ zs?M05c5D5dKEDXLRxzGRM6k}z3|#Mv-&Z~Dttk9i_Mr{qmd9$sZ7=(o_M6V$b8_u0 zQ=)yU-prUaO7U%l5jV;MFY|!h4NNC;%x=WKZ_#UlBq`C>w-$}jcoJsyH7su`jwb8C z@q`40CPvP<5=sT*<ko)S982Ucm7&S6sws(@ZEXA+wLP$Pdt@vm3PXg=npWinmX-*> zcCEzu2~YT}mu7y4=N$qA=?l)nu(&nZk!kISGSqbv%A*DG^oE?4_>>gPeocDU(2*h_ z+-smV?>55G!fBwORv4sd;nF-{#)BAKwpEgNS+2&`_FT*9oA9`vYO@&<cQR^hzEXSh z@g6o-y-MUcm!gtF<0Y?NE~_)D1b$t+r$xG5iGsirQ=wZtbsf>Y`d&l4qb|#0BTR?H zHzeU{x^_8R21urJkiUI5r*}Cd`?vJ1oSet=Z5Zz@1!uI^#S5j<t*?sTKUB$JceZm9 zg7u-LO)(l>G&x}abMg)(nQ+4S2Ox+8(*q6Z=}*J^aA5lZrW3N3cb%NI*Ud`(=qtLK zClHV8Y(!+M!w;n=*{`!-SJ|YVUR3O#3H&|04WL1PkILe^^Zxn8*b{9P^O@|rZ>MXi zU-l<uEW-VuXX?%<JVjZln4pm|K#9F6u)m*9^p`G~@PK-&h3g_Jy}35ky-_idFCM{M zrMhSReeKfGR0xIn!VYnu2^B9<FLP`$r+~>$R@&p^&`M?iBTA(?J(>*D*@tKLJpXJ$ z_6)*jgLy<dIsfCN!PSTBVV@zebbfkfL3csNa&^@ql_e)2(dc`mp^Y0BgNNEmNwVvy zkbI)%x-hWcc13QjQ^E)w3nG-%NJv87j}?DJ*XSPB(zNi=ZF*&=)<&<LwSLtaU>it5 zFO3Rnu|INu!Xu&&btnwaG$NA!=J4RQxp22VbURaCNi>(#^@l(DT^A=xKro-<Xm`e1 zVEo5y$jc-H=}BZ*w(K1=E1@_9w{({pK&@!`gDF&Puk0uR`~2aeuI(7UpWA$yZ89fT zr$;-Z@wh|Oy%1(v`NPp>Nx}OvWA8en|MuTVa2z)jdVL3KW#Ri(xUHb<@rEO_cN_gy zhyNQgy|#pg(l4BDB<c!s%5mN!GWAzXPS3BphkbfXV?-5n%%2WJkBIzYqG%(?c(?Id z9T!|lMC_QBvoMGTYQnl#`J+Qh&#QwB9KMR8TL{*_XHv>r^H{#3XtdM()6{%3Jax5p z`1r?BtyNmTER#k<!Q=8xAmjySd0gLk%vxI2@Q1At20@`(R8_W-MoS(*T5)R<u=%+Q zLHwjo`tuuoBCN~R3ubMtTVq4()B5P+_HTRBZL`E#o6dTKH=tA*&3O<?<~D+?Ds<_T zuOdP~^qZK?$)F%VKm6i?4>G3ErP|NZP)eHU_>?-(2$Vs<O=cWE*8{AEt!cnmVfLq~ zl$2g4L{;+|Sw<s)TZW7@wz}FTtHJ^AO0aJJishe(Xa*6>8)`xnDV{#(e;V4~gg2-@ z{t$@I`A8w#$eo!KxB~&=17>6bqwszoIP1akp&E-yn9v|Erz&E0hk>uu8hEoQR=*cy zn2uW8XBio7ah<$D70DW#)*q%%HXOoWBvTQ5k@J%UmxR86xUrE(8>+q9$Q~q#K#dHx z_Q`Jn;f&NdPZZ%3P}P9i9s_*luWgeRFUmTWKoB5CWk$kr;o#uMv~fj%X@`NwJHCK& zOqs`F*Zc33UYG7x5L7P9)rv@R0epj)EGAJl+g-i-b(z0*-tjm2igrzFb-a9kpD7D> zT4V%2dKXnczKcc2*KTk%cy6HOAdChb-9Gqp+KmNLbMJOvyt1L84URM)X<zwPL9$O? z!fMzMD5LZ|mf2>Nbm;-pJi~**n|Yw;Twgm2C62G{1FxqqmHSRa`c+golgz$5ok)kp z*wW*J>w)9zmH&GIh6FarfUT0(u3;l-nKy5*UtDNf3OP?g93oLs#Poq!n!_JmlR0G_ zo&CCFL-_KK7>S^f7z3qf)a=b$UMS<#ex>E9;G+HsxAkAPe_ERvU3F#mAiXMznf_e* z1-29x%@~tBZXof(JOw)V>Lq-YP1+~s;zd&by%C}B++BCwR`A|*y4_1)-Pe+L0*Aps z@7KSia~s>GKf73l9|n8s1a^6<t}dK){0P{$L&DxC(6qT^GG`+9jKqr)V5v-gvU%Pa z3Op+_m1dq7RT+8N+5U{_ZrM5lo8C5*#%C;K7VHh{1nF+87;vs0FnbUswy+m`N{|~+ zyb+McL|>s+uONRe6>~Z?Ht7k#sQHf8=~+mZreg?N@;$o_B1ChwdQB^~@7=C3D&Jt~ z`0TQzx&G4g3y6%_#L~_>4+}jj9zTnkCN8_);kzVmvK!*NZ7tvFx4l^4vzc4#rw(d& zAlGk_hs0s0qY0`?d<M75<EnRuR9R3?&t(gSeGihs!GNu;>HgJ?2;C|>dh59)9``?= zTJL|9aoJpn6EHv97GQ!!Ls?CFT<j;xehR6X$@oiFkQz495m?3w{#;t@@_9Ua4uVIK zDNZ6e!3P8N8f#&_@x^*=;obHeAG`)$au1=3o)@V(bnA%5*eVecg?D=@WHI!Ws>*f{ zC4UwMNg{o>l^`;oyJNVs1jO>_^<ABvZM9Hv+_`r<6JO39NNe!&4t}`bIlud-<Fl^j zDguH&%2|ytKZn~WS|T-#-$Z(KF0bsH8+@JF2EIG=k9zLTmJy6=wPXi9s>b=oaPJ{f zk!cThp0g_RAZX^8IWmgf9vYrp8UEw(T$b;N5s8hH>W!1nwb-@TC?T>h_dNeRD>UUW zADMH#h}#;Rjlx2T!lGsdWqYDZ*(bDg3C`_N{xlF3X!8~cK*d?zuUq<uWq5@MZm07= zZlMgnUnE^zkwe+3kQ;8kNHuJW=90qw@K<5ep<PsKG*J;-LqbqvU>Tuv#(dt503#p> zgwp;jWvo<>t92&wrQ~O$<NUNpOzP;en?)4OIwR+WQaNZ4p)6@#%|G7Kuq4-hnpk0U zyc;dxDgJ`!Q1aA3g)7q={r1omFX|j=%jR%>(c{4E?y4e^M1X9nW|Ws)26-rxAp9>H z*PXbX0&+u?vAh_sk@2cuz9mo{3pH}&3&!VN=4^ojJy#)qgqN+q<NW@p31MUAQYpIR z$+n05k_3*`CbjzYNuHtEuhR&DgWp=f<5Oi(N*Yv@%USbw)r!qjHro8p@6r17fyco| z()}Or1on>l<d>wzwY6VmQlV!hY`v6la=&b8yIi@C$Xxctqp)Ib+))ZT^xAZ%@YvE* z<-br?P4^~7vg(cHB^?RXO0@g19_sai$K5b@_jvkQjENq~Q;|I?La5P<4DYK<yQ?t{ zw%1n6w{D_^Fmbk55k_GefEY0d#Gw$|xq0u~eGqMv{{FY=QNXLZ?lb#i0<)GIn4#T( z#sfFv0jYYF2irMo0Lp-f{7hQS{mN|%rod(GaPj>yMzU_X-m>bu%T*Y5A$dU2WE}Ud zW#J1&(|amlXrXLu68f^Wg7)35-3<WP5j${i&?QJCsBRjoL^9^hA6!Xkf08@i@!dYm zHtahvLTx?t1@wozC;Zc_w!c`w!tg!~Q&O%b*DXpoThZ~vd>>4Z`Y6dItCKp|p1-0z z{iuFH{yI!olJl_Q(QM$KN}5{-hWxP1O{NuO?DPm<qq}dRqI->@bj>J5u+h$6`?sr7 zY3t702m1%ad~z3VITcYqFF6XyEUdle{@=#8+%9_$ysxlL*YYQY#U8&{SzFCK`c^Q7 zx1YnU+(G_PFo=e<vqvgZ%X+!4Mj>mK<x8-T1jv^_cr}P|XD~<s))$H-v8)E#Hl(Q? zexax(SAQ!!B?mRpzcpOi91ThTxU<sBb6P+Cjn{$u3NoXL)jdAr`Ug1}ms~+fi3Maq zva5JH6KHYeGzbAjJm;9UIDts@&Smq~qb${qsjx9T+c*D(t_+&WtNMRClqbn(n+|*H z<KI1x7)f565ZEnJE$wT*Tj-kRdNyspq)=@)^JgtaB-ntJ(`?pwEBHxPrj?+kf04CY z`V`BoEeUGAW%e#yIN{~v8=IW$205SrV-mR68l8HCcOOZ|5<h#X!mBN_^xcfRE!2wB ze7H5TXJ>R;23Km7Ym(08my95lEs3a;aF`p>aN8B@%>0{ZfddQS?QAAQ6`h$D1ZF?H zm*FGj<j+-J;k6D8+qeEGpzsM(Q%)U>3rX`Wk4JwU9s9B#v1!X_18ZV(g2$wb2`miV zuHrndV;=dxe-Mm5L#)gvC}Q#m{UkD`(|^$L`cZA_{A=fq96dX(z&ak-AN>ZoR#MPS z1q^o)35=kt$kE?IyL@lK(OkkLrM(l?@F+QiV)Npi_i%;QN3ONPN2>9iINqHjawIK< ztl#|UI4O4AE`KZ<8-=cy7&DCe<K#F$ed0-XQkSM;_2)R6U#$Kr@(fYN!mZUG522Ts zm%`(U`QP30n~!8(f^rnRNLtz}>x8_<RODf$FF}+>%RsMlL_*5a-hR_3!#yD<I$g5U z*IgU>>l9fNU0dc1y&Bz*#vi>U8(bl~YeAzAV#e+KCMc1mhquCnkh|#8Wld35c)12X zm6RU_A|9DT7yccvIjw+k3=3euj6rSJ=;w+xevPwQUDl*}xnH+B(o~WRoDC~-Vw)we z|8k#xQ>%KMX5Oj{_ms_khP7A#){j9>kiKOJsp)!Skr>g3=N~g%AnwW%%o-}_OWqtE zm2FWr!)V*nv#JyZ<BCBm$l>aib7>omhj*biwZ8=l40~b`Obb={v|iYQORpxYeB}a4 zv41ZDS|sfc*m4*nMQ{95ISNN)FpTw993ymc=Ja(OOyl{3*>W|Eq+1eSCgtwml<Ubv z^Yd?>U87{22NsZ3oUQ~#0(YFouk8>;)`4DL%}8>d$mk1~^lz6;KsORJ_|7+$$gHns zB=q&$^}(-XJY!^z`2rZELN^kmui#h<Z@~AD9oXPMs9($e+-(e2aBrE-c&{~~uR`}e zHY(6Tu66@rPJSBRML&xX`=Q4(ob4?2l%p(8F~3N0a%E1?WytKPojUS`P;hPS8w$^5 z<LH~N6+o+j@0bUny$+lzJdGg>*AI)kA7}jZeb*Y9uJ}>htQJr2jxTY!jh7VCJnzgy zEiFCgsLcL;Rh<CUYx=FBhs?^ek55i!uw#U8o@nJ$C_~6;<CJ6j^q62zxpg&gwn<BO zfi*lg`G-6mz?Q)6W+1_NvPSv%4epNmz<r%XxV7bKvm{p7X!vEnK=qcjhA0Qmj;zio z2Lnf{OT&v?DvCBwQgoNo^GbcTiSKCdQKY-5N{!wiF7#uaBvaF?*=MjB3z+}f)wE3g z$%%dCaAClA_i1I`HiD(U4z^*z;aNK*FbZigve54eUyJx7h})E*Dv@Dms^S{jxs=k@ zfp~se?_P>``jrZg>9I3VGEfKVzg@cg&Si=U+}q3W?j(3`67Z>sflVobh5=LpU3j?1 zQAAq>1x5G;f32dz^7cEON8cT39!AeqEp!$Ivur<;Iw`7_vaIYZa4Cl58>{OjejHs5 zva!<Z4J-H~%~ZL5hZZLf#Ymb>6cIEbReqf?7AcMoL5xxoeT1UE-Umj9g4hv%1lrPG zjnN}TOkyrt*;=6xyqBGFPff2+Ub~%^Oz~e&d}o3ohQDm~@t1F0n=XXZt6F~7z#)sg zJ@ko%qbuMoMz{NQj-Y}^4oQES!sU|ZhRNQzQkFzSi!cZ*XcZWLblqPr4a2F?Ku-|> z50^XrNP-ZaB)TweE@2_8CuwkB-*qsCME!Mmkz86NwbhX=l0jGw3#O*~)%#dWHiL|v zehAEJy!l}mMSH5?+o$%2yu>GXc|@s;T(g`(4d#d7ReR}v)RexPWr^BK@3uUQdzu`Q zzTE7{{$bh|<Acyiwe4P4pOTZYFUL_{Og`*`<NjXLuy?WUF`v)lZ9IGhk_#gs$$y{i zyZ6rzivG1vdSuBHM`gTz`A!L(D8K%saYg)ttq?Za3cjs!Ls1`%<F;VQH(qVvJ9n-D zdVdu*`P<<xq~4sum*LqaTQ5x*>z<Ewc8HP+<{I<X>9WGTyV}qVkVII9a|tF2!C=W- z?tSkLgt_bsGR3k)$HQk~bk}Kv=VHxaPQ^)U1wZ`bC&QSXyQ;1DikGBqH=aNUUOCll z{Qh{Ntuy(g+-^aZn9U~)DDe=;1%YgMCsV0q3gy=Bb!L_YrX-X6cJ@y$CxgvZtg=kO zncsWyqEQk=V+4de>~H?c$k3;Unr;b>ojRO61z$j;^I7^k#}%wJ=fxMk{&rpdOyy%a z)D&a#*qxzd3vlx!aFu4jOTFfSQ-aK8+PM0^i1qf?)>S(eH0;N#5$`?jgsgyIp29Dj zt(%!wnVBm>m@w@la$Ls4I9?X{uGRY50faSNxq659hDU0iV!!F`n7XnFWoQ)p5gY9) zmlJ))ChfR#zhHB*MQI&zI+0JhY6M2a@{QGo7AXY&T$^La363skt&IbB97O3%Gp1=j zbuW(V$VGu5<HVHMPZTeEz&<EVz_A|q8bQv+3>eS#K}@n4<N()CWyG_sL}3U1OlB)s zew)m`Ln%<(V)v#X4cez&c+lxD<&MM-2A$eOtBvBZy;Y9<D5=UJQl|S%PgD34rwn}p zN=x~W5v6diOe?#T2w_!&B72sxm2^+nlybGFE3;Cgtn0YT9q6KJ0)A=zIxqjcaAlYN zjp2wqH8)O@(XU9`7)AtWmWUC=?9q{tj9z4AayZhU#RXAiYNpYdrR{P5@l)4Ih$F~p zfCC%-z1s>(w3z58^$xQWZ??ZbXgwEK)<@v9OQVrYiDqDthu5%t0CW#H0|5~IQbDjz zZmEhDH0^afLwQE9405wsrq)8e<fj<Qul(Mf{Te?a_cNU-Y?bcp#S?@jXHMgErpTFE zD5Sfe*#BB)L`)yz!&GiLGCn8AXbpgTh~;8i>0^8x%0%d#wx36?T-eXm#7KF$tI(zF zBonL3AWv^1Kb05jaBKr4YSA!Qmz(#)X|?_K6GBi*<9fT^6HiQ4L7oc!AiHI)GP_Ca z!PqZUE0#wq9gtc#zec7Oro<RqO-yRXDRxz0>OsDqYZs7`ObCAih<{v}=Wb&?&c=g{ z7Y6PfSyf09bC8&>o;3%MM}r3`>aYK$>eYXu2Im<c{G7M2#!7fY)+>RI@6au!DES-B zu<^`xQNKRYt4F!L;?;?sg4du?F&Xwt{;$y&!q;{ojkA8aYp<BRBX4FUB1vDt>o<Ys zD_$M>zE!xjX=%x0fecab`+kFNZFiE&4_3p*uf|exS)n8)Y`Y3{+Ne(p8RI4#(hytC z*BVf`4N5F><-1`sK1=ss4jQg~b1lq|{aoMFtlo+O;Sl5{RM7bV;2!7oe0#O!I2=)T z^|!9I8?f{FS3_wzRpNmY0!&&UT6d_!c+ea2q$I2Lg$mCRrl{!GZ{Isy>7v)NSx_~% zz<^lfw#5~sU77Mt?^niy6K+IOOZ4vSm1K7K!goE&Kka|MQ5;1j@DC7|(ENaXJj#r_ z((IiuC9Fh&XeyBX^i2@u;!)*GWlWM+KOze(;{vZK%WKx<;N7xbDI<%-^>E_Gk4ScS zHRsSk*1_l?v<{h@>}1+!?D%HfFIJD;n2iV8Pldns(Sds=2=_dI=rSB4hCgMZENFo! z70gEyguK))CwKEQ#R`y|xPK4_r)M`<@~4DmS)fjfhO^^|b7i1RGA1g=4l5BH6KZ}e zEH3P<A_sj;A5FqYlJ<>vUio%82yv?5Y_}Mm=K#zi4T*RljK+XeOKG%$UXEL1uyAGV z_omG!6=Vp}Hr=)4Q;oOpZEP)bDr<=cDmVw}!rZ>rTb`8Idqqggr0F&j_nza6f`PE= zgg?6bT|{yvXt#lAO7v;^^#@`+g9omFO)-w&TbQD^ve<jmg%KDf6brFw>y6KfLGb~| zmYSK-*Uf*%0;xM%aJ*3hc18hMv49{}g+&f&g}B<wzOin5Ej>L2R${3}(T*u~PaI|u zlaJVx5jNCnf<#j8nMDpZ9GzPlrZd$J%t>Zh+syjg*~~(f_8a~_l$^Op;nC_upF{%H z^_tw-ZucFT*w}1y&l&XRI$V*%t<^t;|8AD%q6_=xmo=gJXC^lu+BJxLx%BvCV2agj z^2U`!&=Y;;U>?l}_Yjdb|LefV3foi!94WVl?^7fqR;<o7DkScRM|kqe22!I=dnSH= zJsHEd;}v_3^ZZMDNO+C#2L3kx#%;S4iIgT#`Pt#%O!jl%z(?#)#FPL0n_(~*aE%az zNlW_xf>C}x!_Mw*oMz?6!Iwk89RN%sBmg`o6^tEb<FzF&5Z(Fr0{c}W=t?Eh*48#H z<bqhI>Nb5wf^MTap%i-tSKFCbaR~~|#)W6nKnKcy<+#~xgI%<m4^8SIO(2{IP+Q9f zPQnrAAD*I*)XjOgPi3foITpzmR5(60C_zERA?x@Sw-&nX07-%Uc5;rZz{)jA+~SH? z)?w^8BjNq@<hx6d$q+S>8jsCy_0q-@Oskh@>eZ$be{nXlN}abFqiyHl;Z?9u1%<ca zFc@gxeJXlo1pI%I?;+3bc`HSprC6qnF0b55tfGv`(J%kRAjIP)vB(V-+zTgSaXXoj z!}zfBU!dGxPH*$^lIOm9?r^YWn@Cb&EAYuLs!Vyg3Ex5^CmGlCUM2kJ1De`SGI3Cw zcEnN|EEB>a>I8X4UTV77*x1DZwgOcjZ=XNk8#Wg~4LY@iNJjI&M90lEp3^_yzaM(0 z+h2PIw5ZzTB^17W6=$e0`gJ?I#sOPXw)=_VtB`zsc2kR&;gIs5FB7BJGE)T84;gLG zy#c65-9=xy1;fyv2I8wGXcnisp{@Xex{X<xh1BnwJm3cnupUsMqx(M@s5}zp!0_lw ze+Pw*I(zwE7>}|6#t$xDpjq>XQfLVsjY`&;r8Px31#b?MhFv0qGA|nqLL74HQ&?9m zIbnBXq$7L(DNbjs82Av_%s1nQg_rVW!4P{F{9%~LapCPA2o=RDX#w+p|H=yfP!*;u z-PL3zW=_rtHy<3Suq9pKb=c>I5R<EPmP@~DbI>I05SOLy5GUw=BE_Rnz#T`@1jCb8 z09~LCWCtym?`tn?e^tL_N+jo%kzvY=D1Z4ke8@0nlZwc1_X-Yh>T4*I5$QS`!Y?@M zk|ERlkIe_p(4btZ+^j5&-l%oYm!Dq<&V>*lLmKU}VK2R@FeDZD;yWumjy#it^|cc5 z%nR$y{wQNYC$|m`qEC(xDOJ2KPj_7~!U<lTsyp}R5hTsV5)znI=|L9w8k{htNZiut zu*K`J17EIwVV9|EFRU=IIWUlE(EkTI|2B@zDb3D<K^Ya7Q`xh3Vou_UK+r0YmvvIj ztg&RRY*hVboIrW#Z{1V~Q)Qp?jZmRpl7qyn?n!}mZLyotnDR;iGC9U6PGl${FinFX z%Se_Kh`WR8D}Sm?z$_d-)dgJ~!N%&4L^#6J%L~*~+3q!z45mgs0?4h!C=D^&+q2qU z^OPulqKx|<KwQAFnadlEOvg$xtF+ujO-Xs1oz1M$$;;~Q@!AA>S_F7vK=5n^lM`?# z1D2|8)kho<cU1Uw5?#*Yf1$dsO%mM4Q&vzA;;_~;y08#srUxVpP-I$RD<sG_{sAOP zi}k8dp-_<eGcgz@9?SpLgF{L(DnP)dJpKVEN3-Y&P$d<<3pmlLEXz|-B@e8aR5>f* zMtxu5H_mNq15Vu9guf#OOw=;8>Gs)I3x%*0CM9GEabO|`Zg1g3_>3<9F7oO!lK$_G z%iST`?B9c^+;K~rUSDzgPqYoJ23u}++Ggz9@&%P=Nq_x!OohI%x12?I-gU&Re1XaY zwy1`8z?36oNg(q+!#SS!154fKAUrLuSZ?qfB?=D*ieLCPlmm%S<ySnP=9SI%VkC#u zn__(oCix;fOgwpacfRqdxz2tf>#KpB;UiG<qghG__zkN*-j1XIyF~iw7-W?|dcLx> z_NMm2QM2Ew#}2)N7Slymy6P`s%hjEy=xtcU%xp^%2JO@K?HUakOqtPGL_(Dun`D~d z09YoB>MXYPj(EP^{Gzk!g`f=y0m@R$qK-6caI33GZH>q*T3HhqeHwsn2p$Ufjx1hP zFbrNj1}qe@gCA*s=u#h<g)-1|hi_)247YjzBXB=?hk=NzQa2*Ke*Z@Mnb;=>14^+3 zCe2P<Vadt-CUX`^Xv5*~C6~>_r$EiY>zrC+30>NB@(b(6H^(tFZKs#MvuXOE-d+-= zGnDSs+i}<S?yfNv^m5bBz09`2L{^6p;>-Whj@B%SH2$9OgFsf1-f%0QV`)(I*<}=i z3QShrc7YoYiS*STM&SF<1VkuQe)IEk2k1)GEjJQ96gohj6%1D2cHCkiRwxokd7FZt zlBs@>rCT~8S{#)8{)=DFn;*cy!hL$Wd6LB=<{KgfvE6qjr64$aCtP&AEaG@Q6~Vst zM+@g9$nNd=Q%^a9deQI+bi}ZIcXTQ0cx&-3ir{Qbmwv)M;f0njco2dggYRrK^Fz$^ zz{v(KqP+pQqQBwb2yviu8Q#uL@$VGod_4x4YTz#gagMX|bKv@pzZGPt_Zjdy;4e3s zc`54hx3}-P`;4nL@xX+I&0vMg{o545vB_XTQKBYa(rIkcnXtITX3j@uuy(sXe0;D6 z4@byuWA6C2wB||6lPPC3UU5)4qtLuqx8OqBcDry0;NHp%opEv$eQ<;VbqJXxBr&{s z6-R>>2f?j&IQv@Z`byx@KcD4nqsh{qOl6BXu+*Q1#yn~b)u`};;~)smr<7_Clh)b5 z>qCV(FV&_I)?YS>ORG)%3MG1TA?=_`?(wugzl2n`(T3|i(=j53)e|fEzKUZRUn>c< z*3{2=lBHY&cR?J>fhY{*pQ+L}vvvhtoMmfX;|F5~8&k)jQ-A0ELL+$!_5s)E3ykej zquRVYI3&}e^;unvPdd?BB)bod_irYfAMX#<YIof$XXE8YX6HK!@o5FzceG1yhI}~9 zhsau;jvsT>Sx<lAddGrf5n8Xq*Y6JO$x6bN<<Cr+%m}rTUj}}ZPWx(S^;LX!Pso8z zg&fts#4Yjbc+^K!H*RT|U^IsVQjmJSdK6iQIy#faXTIaV{Xrmg?mtA`d5lCk<v7ZV zF7*O>AL7wqO-8q}$%%d3T$uX9b`GAN(Dyo@gmZx5>B$gE?{Dxl8=Rm5*w0oJRqYOl zyrYI>pMI~zqf38Jw0=$tO%B(}UA;a_B(tHEG{%EKV0riucFigb>F+hWIwKSF?I1KY z3MH5EHAS<3-0k{NYV{!iHHV^q){Ep$sP~dE5XzCPnYb808~shvu=V#%)NXkTx8EmD zRwBb2i{LQQ;KGmLmAghCiTWj8hrg(_=_crjCjIVag?@Yc8E5aV%AE8SQ)3v1R0q|Q z?KKopIWjN))Y{TcoN$|cc9UB~mdQ}dS4K@=OBTNLCq5as%2eO}_<Q6{602d?Kv_$B zd0gj+7UZ|DNmlvPMtW`nK-pDzce>+IqfzkVi!oK1Oqxh;tFzwLQ&`A`JC&lajEghj z*!1?g(A%kt!`MmrN;Z817z6MKm1H{bX5X>>XN(2KhyS@39&UEwrR2}`KOul{4_rjM z17?PvOE1Md0svy4omB*mNx*8sKnTx44cNaLiXJ{C4}Q8UK5jhIFGKi4I3kHn9KuK2 zQ%j4J+<L;`3CT^x{)2tC{`#bUcldOSMJ<O36WH+;C-8g&Cz2HNTD%{yJE<~;$ET*` zKwC;f!;4;r|DrNrhExQ>spR+W%rU|z=<skIe0xc7Xesz3|8+)zere{D6bJyt`=}%R zYda>uDS1)rbQ#B?{mBcjF-V)u1}t9%5+LjiAIZDXb?YstJ2*!M2^;jELdCf#Wkw;1 zimM30ze!2e!gsHF{WKl0nj1V3QdTlkC`zm2AcaZMECz_(IbTA9cq7hcNZnQ@&H0VS zq#0Be+g`2)Yg;k?NWAFsW5Ppz4~=3pI-53*q!0?sV=**c$j`G#iiy)aLQJmI`Nb%% z3vqv&wRcI)nkq-pmh9OOf}2KGBObLLa#MptPXHa~`Z*bwf&hmIU4v@wE^wRtuNfBv zoK1b{T4<jt^}hBgepQb%gP#p~Pg+C^nu&8-axfM6%s)@B+*Y~YYw}$dx94elQ6;OZ zpiB}nH3mPgCrqQ5s0QpDvCbP6dxyUQ1pzeb(44oz#BZE+QG_giSIJT3Dd!Fc;(<@0 z13Z{DZ5rbM`gR=wCBWgNj}eLPtCho|72cKZ$MyZ1AKc*tnJ*DGJ@=fFSUnOaQ<F0D z5xG@R-TT|+G><*WmZYqxTTM)J5f^n&xKE$Abi6SC;b*7Y)zZw$@)a-Mm;^c+Vxo?s zp<S>04qc=7K!)vlh9Y~!L?3w@iTYNRY(N6-uvbe>Oi`S28&$#35-Dqk3d%I|lnE7P zrheis{|X{3eEB}`z;V{HK=v8ii#JUJI1JSui>6o*?#Qj01Oh0OfAzQ2i?NxGoEVYN zM8XXR=>NR{<6N3ATR$-gdR=wUk0&t9rAczpr!(Of5~X`TaF7XX7(ErT;(oFXHv_kT z*NHF-5M7jY%%A6(qz{$4s0wd;3E%xj3apeYbT4E^NXfMTkJ#mkh6EQ;AT|D*pxb|c zOcwq*-wkYvqGd_)jfd_wQo)&8qa19BiU|W|tOM}i$)A*05un}hG>^k846cB+wzdWe z_s9Tl+1jmW`sT_Piqc(%pa=(w`{*Q_9%(2_#@$5k7u#P0PM5ZTZ-T%^URhy|ay`Z{ z8^RZBr9EB#1tse(^^}#yu{%@a0{k1Oo0M4XAEjZ9d-)H9rNIjd?m=L&0?(^e4zQcT zxxBy-HV=f%G{+%<K;z$ld_xdZTDt3&E@v%;)Zm1QaCUK#opNMvc=!CD$Ri=kn>K|; zYN=X*knda$NY8s+M_8krOi@{q^BcxZh71o(&u^gc*x%<q8J!$+XQ_Y`Vbj(5dwyFP zbdAgDhX9HDBY{nQ0sF;q-dDMnhZY?p+zBjkq6LJas<FLL_Yv-vKaG!X-W0#@Ct7Mv z<64ttfOc|Y&!`sL;nL70uuDdTH%ZqFUr~pUcSXHk6fe^Ka8-`a1XH9!dBYGjA=$5r z-~AQYD(v~@@W%J&6#u5TLwHWBGGsNN`b(X~ieVPvnj&4^$39uU*^t~Z%OSy2WiSYL zf?>AYHWi+#7Jq;?Pdpez$d4j)QH>EQQZfg?beosUJ8{=;0GO)AdWsv6d;Vx+D)^3w zV5(9udq(myxrgPkJoY~uUJOY&xgNSK>#6=DugMxoaVHrnfAFV_;_v&3y3h$q|Mg!y zfIS39p0-}L9CA7S`%_3|F>**E)&FFU*?23{8nKrJ6l(($<M89+aU1LV#=wB5f+S10 z<qJ<HM@E&2if+(pyK>sYYp}kFT;hI61vrg|5GE@+kv0A}!c>?#eOcV%N1ykSX=*IB zKR1MR?^>cCNoyIC-(dL><V}Y9Zl$?h`E?!{|F|>$YjAd9V{$f)|BV@GKvAPoq*$9+ zEKr=^Vw=Fn;OhB5(O0Q!YH9riVz&y~Y$yHK5;fa$P63+lI2nHCx~TD5l;6YnYK>{M zQL>mxk`(Mg2J>o-_3hh`uY)PPb-aFO%t^QCGB3I@)&D%<_PX=_d#KyA!q$3v&q5;b zk^ko#j)ID!u=E2vUKO>2Uo92ur`=ZUHMs>%sloZOAPn8vaydWnZ;%u$9fXS#qVp9X zE*OSM3LCuD)iLDj*So87-*4B+hOVc#J-4dkxmdwv>Af~IPnUIkY%EP*uHw(LGmraW zp+n(Cw>2CPFcJle@vWQ~RmuBN>1?qwzV{~Cgs<0TK=T4DytK%vy6z-(X|X5xeAmL# zI<KN3uJWC%8d`m;O6#;r?I_ih$<db9rNg0=>nI;@Z@1yYlyu0eAJL6nlf(`CHjhH5 z^{wNlI_$~uCVI^D8CPA5aH<|?ZzY9yQxNPM$Y=o9!#zGeO=5`2qO1lom>g-^mGvTD zilp@Z8`_w>=HS_G@8n`5k`XUT>&5EV6(H(9D?)B5o~e!%dORbQjoDqV9N@^w5{TIJ zaJsz6f-nRx`W#phajcpvwX|PSqV0fGv%|*T%;oWF#IR;*f`y$e<5Vm|yKIfH@Mv$( zLEhcN@Z;bZ5!RKD;Wanq4+qp%To?n~V;m#jz8H^*AcKw!@y1(4Bandt;niGz6Aw^C zVv66j1^4_T8)Q>Ko_4DYG^w}Q(Hk1)7+N_tKQwC#kag@-X_J0^{#)p$Y`0@Ljkq=j zrmwn$d~-WvEO);>5hf-7HXSj${(k~9gGx#l*u;JPaQ)V1*Lmmiir(b=u@VZQL;@Cs z7p%JbHMG7Q`Jw4u^&l1}NW7DKrs>EzMx~t*J~fC{HneeEaA2<FK;-(cQiuIwR)H!9 zEeB?SPR*R$zXc1+?s>Y_!g!8IhZ_aA+zA7|r@rfgbDG!1jKU=)b(gPX^FtC0v#}K4 zyaNUcrgGm>6SN@kX}z=~X8opC%B*CrLyGWJRkuq%<cw&l%IMf}{&s{sGx2(Gzivb{ zH*ZHIrqo&nKXh7Ys%(r>K`bm2_TlE@Qrw`^<x-#WxP^y*Lkit**R8M-Gf>_W8Aw;$ zR%iU;pC7$0%Uu>Q1%s=BL_<vhqmQ!+@~?_+P+J7QNqDGSqh$V0?6og}?4UAXOU8s` z&91KPCRbduziaX|1Qr|%3CAp5%PtaZ2*!SPIg`A>l5~8hbQ;@{Lv8(4(V8TQPQBmh z`QJ*rHBImPTf@p4d!$XT)toff2Lbt&aqUDdP>fax<MXZF-|kk_V+xnFH+(%~gQ+sL zwYMWJ|0_)ZH;&_MHH7GM1FuSn<(NQJ<<em4fZ;~owc5$1K--4bp;*$P_ag*bOAd;X zlnAIBn#@ReNHia7ZM7hY>V)(d+iC#80Jzx>a4F;C9};+PG4Nf)-#zZ<k#<jQ4n>!h z)seE8jm^(?<RURt0I(szsL7}k_8ju0h}WY-5k-SO<0>U{tdI5{c3NpS+@uW5*tdlt zRXbn>Now*Y4R7{+tnxU&>&|_H{wv1&jP{`I(Hrh>17^N7X;~G;?|Ay5vqQ-PX8Kd~ z$$goMe#YD1lEQYUuUdz%DxSG5|GEV{C!7sMjyH-0Mf6Hi5kV|itcJI!WvvfnbxY1j zw`8121Fg=?oguE!jS(l!ZQhi8yc^Nd-PJ}rZjCTTMrY027?c%v`t4a!9q)UOKVIt? zAB;G?_gZ;h*Ad7kLwA#^?A9P}XWw1*>$Lr`EJ%+e%q)^_nU30G!0oJW{%9{weMH~L zj&40W+H+5s4k+lYUuKBTY}rN=NIOQ1b3iX<t<6F^?A5@LOc-vu@DF=KFO>W^NsV)> zS5E7B=OP@i$RvUUh(d|r8`GsIY$O2nS7$mZQu7L*{HenO?peS&U8?|FBBrMHo=|)p zsW~5i<_mH7DjkI=%ptA?eeZp3R@!)HmBjXbU}R_or2M|Bnlo<#(WDZ+Ga-^>yf3Qm zE}<uhH5^7ACTMxx3bdL@$*3*#j!zuVqqT7^fXH?=zbV=ah&ym*1VGq@QIjcuCeUsO zHuzl5&4A7X)gQAAP`_dIv_*J4j7V1BbN;<Eh)pUO930Hh=)qTEb^h**sP1!@M#xbK zOWRPOS1*AgB{jCEm~@QCzg0P*xK}bRh#xB7OZ30Ievnuz-kfRW!9E+g+?={7i+nis z$4tp52-Jut7)I#yy?r>N5^MbT67x&yMXm83&&rej+JPRGpEKo_<Qt0VYifegk9WUZ zfAi&{OX6lRF>N8$;(8~}%U;-(_x^2N{W%x8(6}QvSKMTAO+QzBJGo^mrV}A9J<hV^ z9P1|~m>B)lEVtvGlFp~eNu6?=V@3DZi7ysK!@U^xV)B_;4XYCB-mqp_?{Ts>FMEpK zR8)=d9_f=VjBGDf2iepjWF4xQkuvFcex4ze(3PD+w(I^?{*p@D?IJ80Y%e%Ew8yGH zgpACOAb>tjyN_Cjg8lEqV!U=(0gpLenM4S4D)FjSj=@%)_202bNdCVI>B^tA>aSEu zBQRo0cj1E-AX=uwak%>I$+>J3?;QgUkNKTf_A__!t`MTvVpU(Cv}bI7I#sEw`nbWs z$^#aSCK<=iFj`{K4%(7^F)2kJokTqsL%w}JGcNq5fFn8YSN7Mkvg*EV4&8ri8ve1~ z6ulIH^E@7Q+a4l3MKfZ5UtKQPZ7l_PW{L9^WRWc2Qb-gUz0`Z)zSL{|e4Izpk^Sm* zVD#TCl3*FNr8j)%r3FTp4(;n<ps?<_;}P}km`<Tl%1fdqX)V)d3nB~Ed~$>Axe0xN z%L{h#?|K*gV#lJk3=5Cv$A@_~e}#Mjd^`|H&E+8`|6!{vwsN25@GoS0%Yq(VVq5|> zj-)jo1-Uf__I+;>k?zH@sx%Z|4&{Y^wro0Io&HL+&_g@caLb=n8Kq;yj4ayV&+UHC z1a|kdrd``G3d5s|VMu}8(j_hu3KTGI8cuWxCNK2~reo@at#Ek?J2kO;UhoxL25dBj z=LSxrF6IG9<`2~21a&+6j6=sBnwZFlz40W$pt27JaWKf3xfJUF4UxV58}=HIHx^bF z|KJ4dP+HuTKQU<%c(WQDZp;{Y;?Qig8f@AbAa<yq)w?MxTnK#&4%;u8|A%x)1{6Ye zczX;0%K>TRK$FA}b+S)c<rx!m_CHKX4E3Nc7cz?aLy3Q)cZ6jep7ACX@=8k2;u#Ky zt1Wv!-OQL{qw|CmQsvyOSztT#`;9HB>WPP9`9gRX4{pi|Xqp|nG?nHuIMF{m30FKP zlf;7*2BZX(ylY7Uk3&X5hI^7sL~?fF$jCR7oeHh%c7=jZ6B=6LMYC8-Qd3UIZ+Tbt zC>1JWL{w~8N~JYW@`>xB{5}^2#$s+OqcW4FyYIZ9XuRZF)Gtpsw|>2h!hWlk{yU*a z>uPzsV03g;6_Q7bj)4Ta?B2h9J9}(HDw4Rk@~~ukw$v(`t|Kvp6W(H0i4&*OV6yq; zs5Ru9*OF<mK}|Xpx}~N4zb#8SZrdB)o_(?Cgzwa6)c;gU*Nju*7%6Z1w8^|<XdxqN z+T^_}09~~X$3LG8aBKpFQsu;^?!{^5?_bf&?i=!zs*_vW2YC%eIAzE&!gu_aOQ%%U ze@jgJvR}Utb3sH?74<cZ7Ws;se(p_3+tuB}5)6o*9h_aY`*h@4O--pF8M;5W`O>3x zaI4mOeMtZwl7buNo&g?|G07a$>#Nob=@k=`7sv<@h~M+<LQzQ^peBU*8(>)ce&w4m z?{RrQe_DX1TjBHyyqx{{{8#0DWM9sV(;QrQjpr)!l51-jp16B}niUx<tZqr4ThmYm zL<iDC!M^)m|5)zAMt$1X1qn#@Z)E()b)N4__?;L?*d}mFI7faSA?eP%^!q{4ONGVd z=E@az{aa2{5-1XY><XIPEjQ;9G_2KNuYZu8#oHfZPt4|xT*NzJ!(LfvP;AYSy*t_1 z@y`1y{U$H8l5j2M(9IFaU;<nIyW5<^1CASTo(cf&Qv-lXU5$i@CIptcgb^N$$oC2k z;v<BM{FMA{m4Y$XK#XdL=CgYvxcH1@gql;;bgPZO)_%#w2=}Y-+<tSf5N+-2$Oe~G z=Kxo7DI4=h0^D5x*!vErnx&*y@rSlec`eDMOA@9L`?ZB{bL$$W%%T*#Yl%%aF^L^$ zQRixb3>o9KX9{l1V80WcTW=>ft*6~XM2#88Mx<FZlw)lL@w~B(Q#9!eu##hk9(;2P zGaA9nvl{r>G=eHzpPkP$=@K=H_Q%x)2k?xVznuQJK*9AsLQ)mnrt{6^XC1Qien*Ep zes$NoS!}qEnqV=1yeacoRhh1$E{9Fu@F}5?O15y6;Cw1kh`MG{r8zlr^~qO)oE}nv zZ;_L&Z7jVN<Q>dgI%1*pKSgh6hEKpVSmk!SN;gqsDqSLEeaTgSA$Tl0Nt_IQ4k)V_ zBlH#oMO}9J61}x5Y9lH44{V`4YPGi>5Buo;zQ76r68gl^A{W!SB^&G^Q;Qe#lKaPU zQ?9xO;+WTbQyp{mrc-~Xj?=|GMYJ)B)e{ZM?S;zGkPeDOBK(psU3!>u3jGNGSJ+ub zW%&i|o|aNVK#&lW77&n@1}SL?rIhZJZUiamP(m6+Ksu#6MY^RykZx(tJpXr{^?o^P z9haY2@Wg%ZJ$vq%Yp&mrlaL*mr#9ove5VJBf9EF($8fLTzZ%$-o!^E!dxzPhrq!4a zoUNq|fF!{ceAb*_-Z60$)Zeye<dm}}P|s7Ki<yy(m#x)4YG^98XrgyO_xSp^9F86+ zRlvuCg^`xc5w*<sjG>Z!U9hXGzVMM)=tidGjqRH3>n;)gDv#>U#YA`U<Dy4*4BO+& zLA~=3lo3Hx?q+LES;1cj{RsPu3~iZ4iRST~G1{w2&U1?yUGv`;V|qTv50xP|Ag6kE znt?BZ9_QyXaWIaYRa{GvjopZ(?JLp5(|kjmpYH&!<qpu!AD*7Zj;f%U)BVQ!$Nia8 zsKE8UO0}(1J>@wa8mgkmmE(JA1b3*;c!v4vgbN>E>a~IltCpvb7Rv3*B-556leHI> zCMucRUE3}glK=8AKJUMEerXHArw06-_@O<Du)k`yVf{HhhB6|s@lE?=Hn@fzIWu|h zTULa@_2t>Kt5h_>Oc}L80(WiIXX|}(H+|M9aafwOfr}?TrtCe1l`a-H8_4G1o!pj! zYpYr6ysZT?XpmpY3jP)kc85~3(`c!*G7AZ;^pa_BT@@mP8}KKXw$rXE?llV`AmqR0 ziCl!FNig*AJPq9kXUV$b#U;y>o&mOGm7rRtRj?gz_Gg>9`b2}$ZUSivzf4Azf^&<D zQ}K+wUoOhhly$)YljB(J&!nwup3BKXw=qYRN%p1dv-Xt|o;R9)e!b$)e52B7hN9Oc zktr%qE-GiDP~UVuJx6|QnQ1ul!pHaeZM4?mc}n^#7MK%4cxqQ!OJ96*SKrhHTbJB# zGt~mlfzz1}gNJ*iBB>OF)8<)uWN>TI3_FZJcdIO*2&3SsgirUhtCT*zmT5A{3qNlW zWstTij=g#u9dw#v0OnSR$ymqrLE5Wkr&*WAMdl4E5S0?6vaPjr`bb-gZ;}R23r@eP zWsdCu{abB{cQwySnyc(Bq6RgU<Alx^g_SR}MWYQajGXW7RXuocB(=@wlzBZPP-o)m z5)e+#%W2RaobCHas?cV6NBk=3dQEb+ajf(abP|EzaM$B5uO6ftbqaC?pMEoQ-$*+< zy*=UbJ#8XAy#LLYBwqLE8EgJ>uyxf+N^XqU%9n4}uLxWo`G0Hhq;%S1!lka7Nj@Gm zm8c7xo@Y!wtFEpt2Phpy*VMjCNOy)Jw_0U`r|XbNTZHNI4Z}MIjK=TWnGS;&sKQ`a zQ7Wy8HuiAbrTaE4)9vX>a5+Ju)peW;7wkUgz8VOr^(rtl4K_|&V$=qk3ZR0jF~_^q zZ}T1DT^VT<ut_;_gruT|z&@)pxQF|l$7~2WXF5ztZMABdJ>{G1NBpf+$1=Gb@eF0? zz0wW67~%R?+h{|1<0+$~Z)<wAImz8#rq;O2z<L3GwRvixsi~>RdfnUlzCkC}4*Hhw z%x<kT+LV`G?>0A!S0q)(PI<^DEe`}w=XoAqZRdZx9i!{Uu)e*mpv4OQ()W}n{0f&T zvux%!CdnweWCcHRkdcF0q{F~I_g9Fnm~zAKC9ZPhXnxV+?GkDA9&ww;SEtT{ZGLIQ zm5MQZQzV3StZ~6eGNl*6)<1N<HZ)NBdI~E^NJtEyW_mY`mF6lxp_)+$#z|Sa^BSM* z`Giw-^ku&FEgVUK_a&@(g<r|r(Y1wXGN;AG(f3g8u2!DeED)&S;Pno7iD?{GHPbYs z*0TrG2}L(Pu$GYO=P`H&z2l{ZW7H;rcC$-w(uE*o%srIidAZ&9{h`l?EPZax|BF^V z0JbKguK{LInD3DTOKk8rzZtH5Tcd7#+OB}M^pJDl5J7%p{M=U$ZCU_=P!HFI4^2$m zDtW<QLxVE$k5Qd@h(8*IA~Ib$g1P2^*iIZ%GytVoE#no-Lwp&@gWti{hWKb|%*28N z5}0DI$_O%$L`2=yRdl*Krpk!3n+qkEcl4U5tZs>mW#ryNMZdC5N2#2%oc|ZwT7ob< z1j-kE9tChX*l{^<v-B8Lx~QI~OzzOP<3-l2(loc+dLR!gM+p*ngW&hnlP6+N7r3v^ zkkwU_m0Q>)#TKCBhfyTO>YU%MF_F2aRH`F+S1YD`bvaApLyOw;jzb}od1*7PirXTh z_v|m;-piWSdP=_$u`J4n<xkD5_Hxwhb7*jTn@heE1zEFJNY3P7$6Y^QvjLod6x4q) zuJt)_Gf|5WII|*LQ0)U4Kaq0bg07Mc;hxxrC-OxycK9zBg374OI5;^Oyv$dpc1wBR znya5WMQ&NmN_+xcU4px?yIY%S&+E$$)j=}PqW~Gf?lW;=nz+*2V_d8%wg6vbG{LUR zy+<Q9<Yctq|J9(X+Hd!vd`jcoj#=`j=gQ0(>a&$~%%Q;E13z~t34jg4AXm5!ThQ(W zLRSe>=1d#!rJ5uRJ|{gLRq3*kgexf39>~!cGBZ7m@NWi#FDbdi6<c*?Vxs4=!A0^0 z61eLmcSobNkP||s7HR>oyFt#<W`^aTZ;}wXaf>UbY+d!CARcPTAilmYrYBMJ;E}fh z<r)<lP5uK({?{?V?bv>};__{h>Z3BeI^P0{?%h@&v-{8<-=Zk-8d_;HGtU-wU2%)+ z53pZ+W?KdPsia)UGG7l`dJ(UdG{haO_Fq8>lh`zXCtQMSy9CuuDa;o5Vo2~4xvk5h z>D)Mzp^<W8q({b!Xu=UMk##%RRv$T=|4p#&=W?vddQIQqfb~F@enON!Ru;3udPde= zQs+B*`d@)mT&79mabkB&`P+``Z2t&01g6GGjyhRt*evKJYD+^rmGC-rqn1OlJh%41 zuo*SeJ(%vrrxIYKg3Or@@FGh!%0$M#L3I%VCuq*LKh8ur3<eCW-Yzwn{!D0Tx|(U) zU+~8}$iVZ$oc{-91gxRL+dsPUkSc#v*hh=~9v&aOEjaO<H(WB;?wTCu)p@6Z=X`E? zmOo5^pQP2i8O5Q*q~zrsM-dkh{l*-6-_6EJ;g)*HFpV0z?n|a=Vm&>+G_WgrK4WEV zdgFCsyi!7-EL3EsLnvgkSa)}_N&$@YM(@^7|9qI*a|2_|beJfL{HsI(_z7PV<q19K z=eP4QVI*Ffaz;Yu5kXTG%SQn5!8fb%N3@R-ZlDlRfkR)$653%PzOuC2K&h5q_=9-h zAA~}>iAmq0<kRNRRE3`&TVnDfVAsG=QScG#E`5}uX^B^mct-Q!pDH75dq?)UVsPxP zGrLX3{4jmJ_Itt6e%HK6@LG+$i1YmqbesH+t$x`7t)F)K9jlytsrdOFrcw$>0`wC` z!$7Ws7u+}tNHGLW2ey$Q*&D0P&ADlT6RwRgeO@ulX#A3dIP;`VFpY0r40`Yj441tS zpn;_1<k-t;zLh(un<Z7!7CCE=h`23~^O^XX3(IZRHXhtWg>EirSWPD-<*j_2>>!Li znT@pdKAt~Yz+%WGmy*=^Ac|G6#FiBLb(2s1Nl}qmTrXWw-TpltpTqE)TIyMRvO004 zCmPgz=TU8EE$Z{e^Y+UH;WTI&xcLFzU7dYpzy*%j4|_Ahg)lHfxYY_DCJwN}`Hb9@ z8&|edSO~)Q6H<(|l8xG52=8ZMF98J03*plSeJiW!iV*M=2gS|O;AEoJmzONjzf9~} zqXMfmP>71oj-Q;hREj(#QpU9c*91Fkx-SNacO&^Dl+tcw=Xj4vwUTD+C~nc91?tnD zHA8Lh!aJMH5)<1dB<<>i#M^awfXVHSL?B*{?F-%$-p2QH`~i5B|Ge26_ulZ?3@=h= zsItWLtgb))WB!wS%kB~mOlnMkuwlqx?f`SO^X7W@<^TYx@f?Pov;jPyY<|C9bcC&H zgZcWN{qMryLorLNDd;Y>nhGD1{RcS#WGe50>-bOS*e|LWy{>er(=}!4zPMhY4;T98 zuSuGG)`e?NDErza@G=|TL1j5w9jutOT4O%{dHK8K1CFpe+vhj#WM5721=vFMCI8~& zizBJ&khhgg*1J7QOK_ukjH6BF-i#*jkMc$S59EIKl7L?L+wzUd=dRl4rvrV(OIxu@ z&*M?JPrmN7TWW9SeF(k;0y3gKg@Ba;VC|DJU4RB=v}fbVzx=F-f1F#78*BRoHuE1? zm+xe*ezq##3FMe)d~BF+IDvn!yi+lB`uE^ex#=Ou0#d<YIT=(J7`hYSTxC=~g*-n` zAW2=aP598btk&hJ$l0;N<+Y!O897JXqliQ~np}?Tobcg4HY5#u*adpp0Xt}4e8#0u z$2D(KekyY6PY~6fEj7Jq6;cxF3}6ak-yifhqa0QQj$pN}p8Ek=)pwnbDvm$av(^rK zB7deAX5{4?J|1#5X!oZE5i?6)t33s%(qL>Fp<6IZ>Vz3uMM#E=$e&|c`lL<v=}J?2 zplrkgC24hzs$B%zV0KJv_<kS_kPf??bZzSQrPS1oH%9Y%Tnq^BU45h|Lp?IStDub~ z=F85-c0JzobaS6yUU>0Ugy1r&(FvKD(nmjvIdMH4GJf-icLBVml-K+yQaH58g2L%E znn30IG~0yz5Eq2~$uGNq-aqk-K)3w-)Vh-_EZLdQ!RYbyq#`yGdU1=vsP|n`es30X zUYHkhneB)UqWo18oh2r|z{i+WCE=j0&3-S}95D)R{C7C#5_}g-ft>*fh5QJGsDWjO z4W(24#Nv(dFP_bcWs#Ep+6(vUtKWb7A9!kZs&y67&>N+$(G68kl7Q`HW<E2}aBu08 zayo5{wrAlG*w4J~jjQ`{t003QgGt9@dEjjSc!JY?L*H}dFwMmOWi$C$XrbR&)M_`= z%LK;-KP#PvPalfwduyF6-R9%6Vtc$xU&%jwqfd%Z5G&sNWO&u+^hi3z{o(FK_uuTm zDit+}*0=~$Mhf@t43HL*JaGj|m1hVl!_L6^kRg)?4|<(^XNfc4H59z)W05mQA)9SQ z&??|Lz6Mx;a5g)L?<~(NsE@U0=~OR5K0X?<Z6j%oGnuf^8L*RJ7@-e$95Lq27tsdl ziI~eFKWwb4+xSaO$e0p?{>Cvj|5ppZWiopxUG!srjl%Wdf^Q+f5Ho4`2osMXCkl^J za=IByD8RgAK=@*?!R>MRt`FF&@_*9bPEi?3%%oOBXF?NOc-ODw{nP)6a7WKm(?J1q zlryflatv*MLQdnQy!WANgTJSHzi}A8D)&UkyV|E>6a44t_&lV(xzcd<&eC8i{(Gp8 z{eoU4s5sjJb>0ip9J2UmAqmx)j5FCZqu~aWK6u~m&NRKLDf(En86xqJO|O6L5PX9X zPzsGgt&Rcjlcz{umC{lji$3D~az^Wy^GBJO-+O11>U8TCbQJPTy`zLXq^)}hvekZu zb$n{1!d`u-tD90$#Z|69D{y^2{Njt<C|6Qa@{n3QJ8tYz5pjWr!wo9lUe{-;wf1+4 zrauW{C)bJXS<r_CR+~G1W;4b=u5hk+cQl%J=`@E^e|mW+|LhN`fR;cBu4S%Ui2XT$ zULYq%7!n|84+!c5!g|$nzRPL0J))}#GMc)h3&^;3#Dy9!*wUT<=oNIFBL?^me?5yt zz!wqj^eoy{xWS>{#A)tkSTPw(8s&tI5~zvZOAq{gkgQF{X@hpr;DbG@A^I9GnzQ); z<-T$WS3EXVL%wvWnDIs;Lk5=?z|$0D=09wN&EN5&joRH=4otQ&I$gXNaopn@H|Ifr z+Kwkw7AR&mLyfAVFr4L~HqA<(CU~2{?#G2vx!pdNBq<X=TFafBAFb>w`&|##0BCFk zh}p|EpKAt$7)o?0B-r$%(j3Q0RU4AC`kCN&Vyu0w>|yN@yj)zgP(eQ~K12|~(yq2l z5e!s>=9V$E71W5a>#CW~FJqIylTS@hS>jsoLT^|iiEpdjkSPa!Hc9%yoy5=}mUxc) zstJYy3Dw4A@igX&S3ljXVvN0EA~Ssh<IDkzD7vDxpPScyiuk6bJBywskb9AbtR@_T zPKcTv&7`;a*y@1(wBMX3koarrzL?&dhA)~VO%a>Vu=2vYL?$C%Fx@5VLqG%&uz(3Y zk8lKane3?v($KpnioD-gNegnRM@w^67^*xl_i;}^O1FrhpWu+NEWqQ@D*5~=#)~;E zxv469&q(h@7W4pWBpnp|7yxILSRKnrg^~Mz9?zhAQLHJpet#HG`BJ7tyYFj>LJxgY z@bnksqw9-<(Zc~c_wv+T7~`X%IZX9T`ud4Pin3nB@{1s`M5YOg)j(&JHLiq&O0!jW z$rPI^Ct4Q$u5?jW{QST<YG~0i1{M5m{sxagr9P=D+h;c@P$8Hih&jto#`cI(5x^T! zpA9G!Kzgw;2~7@PNFxyI()+aSfoh%_-__B`4<NaKDiaV3chSUDNedX|Rw}-YV`8eW zj!pb2w?8zwudU4}hbLl)Z-QIViOUCvqv{=9_Z<JZA(;+BBBDsIJN!|(X<ir%N8Q;^ zLq;_jCH@HS^GO8Z8BVsBzS<6ttBev~kNRgV=jTu9juuK=jKQ)yC-Xcg1Y|6JK~z7V zc<<w6KTzKKOP3Z|;c!d3PjDbhhYgraN_!znp6@|=2j+c0z-0JrFGvKJU9`6pawVRP zd`u6_+9HPXQ&5F1e{o$3(XsC!z63|CKfmg{2O#7m@Yz2ERh>8*jed{R5Vz-xwtrq_ zp}n8xr~>i_xgGd~W8S}P(G&}$3M9k|^{_#oa8cnxZ{v(g{WWNx<+fV<@pRm!sCD=! zWA!-K9y8BlJ&)Kwol;uTxH$|3hU?7EKi(@7b4hf?tB3ryxGvaqj}uG_EOOTK(MJ|J z`>SNvN32Fbc34ANq{a*!>c^TzMquK`qF0{)!yiR}s{bXh`91qvda49s?_3H|7v1h& zb@-XU;SVa{ci=r^kMJVvW36WQI(LNp)!fput?aubawnGpOP{#P+qSRaAeJxfQpjR3 zR&}(lHO_V(EDA7siLvV7yF10TR#vkrESJ%Bdc{y?V$VB&K3;9s!%gT)g_zVT?N08S zHvk7PN8D}ka(Q>Jd(s#(5*;eEeuRYi%!!{!ddchdt^F7zYCSx<KY4n492Sx?PG+Qa z2TxTgfLs_VG9W6pngN%GRDE#q)bT!BMT9KbM}d$UT3Af?ndU|aoFjG)zP;;gm9>C? zz<;O>7#Qf^;>Y7yi<W*>zoPI*=z=9MGg`w5?l@yUx_Qw@i~DG*Qa6uLCR|F($iyc; zGP@HitI~JKC0fy=%E^@Kh(Em@<`{ah_ET!Vd5}wIzDtdJ*e`IJa5X;99h(<-@4ZD? zQ_*4_RR*pKTDCkYK~4I5H8cg_NWxLb^~$`pr0Ep#y+Iy|kA`e*Z4Gesa9f{?86eX; zi6(VAzYE)h$4Y@Y|3N3A{hwN&I>5{V0e#o5vReGH1~#q9wkC+%__~ZX<W)z87kHGo z*cz_~FS5L@4KQRTrkKb!z&_H+=3F4dHYV`RSPVq2+Kf_H4?tl=88}1?VqsF^^|33f z6VEtBCy6u1(&I`{bhX@WV|4$dNJD#?;g4;#JtZg2_Cii`?<4XjeS>=!HLIP;%FI;6 zS#RW6^q^t|RS#G~2uw(47@35n<zpB)VI(SHvGlFbgeZJZ8FAT5B>|+`vk9Y2U^Ltk z_HIA|rARkJl`+GOrq+BRf5DZFOm}VdteEpK=E=~=h(xS#YFwUj>2~lbHsdqmBY9ei z2sOK2o=~+(u!}+rZ4b@Q_a|gz;j0@yM(IH<-}#fD>>bK7rOde(7p2A~F;%qSekb(n zqa4wf+`SPJ%yF;sW!KM$4&73HcHHVi!*N@)uRvK>Q}jYwx(jJoE4iBZfe(~`Rl4R; zt!7|R14rA>`>a5XxdQ><-L4oxVvLuQm1*Kx8&@Odaj{+fqU7_QRlACPC93p@kuLkI z3KPj*IMJ#DmQegdwRAP+5gVTL88*xDVp9YyKIIVeB8*a+<4rouw}mJ3?ss`y|GZs& z$(ynK2qnbCVqGBJ!d1*yjmT5|xdixVos|WRlTWSfI5h}fO=i7Hq;RXojN<b4WyDVC zF#^9S(7w^9zHVb@$9=?vSrj`hF!uto5+TgzDuhpr<u?q*0`Q|a+qo2mO|aj8^JU4A z{!#T1H-XEXur|Nc;IB5tB1PztmE`)!<nOR$jm$u-)W{qQ%qO(Duel1aBcJH}Y`NGO zXt|3gc|L}LRjZhz^QT$jPHR=)il%M4rO~q_w$dx458q-~k5C;IveX!dKmE!e?p3RD zE;m23_{D#wCO=D^Lv9wDv@Y5i-!WMHhWvqxjx|LNw^f15D+n*6`+Ab!#ql+7aA*j( zt*Q6lnsAbFCjRu55=81|jBm-C{OR+zn8N3$k=i5bSXq7U%Efyh(TXC?jq}ml-xD!A z+xqoej+f7SUvTJOqN$<9%Y9(SH3tqiq68z-=tZ|&brNIU9o_d81io@pV${%5&VNrJ z{v$UMwXT!k&qVpcswUssx8>6N<Qdg6RmR#1bFZduy#*@@(UmwL1TdAATPLTcQh}-Y zNw*ukYD$KlU{w(QU128U7!TrDL9)P_h;Vu$q73S2mAmMy7QgWWkk#JR{Sv%#)Ohl` zb9~iuU2O!H_x@h>QN{(fd4KC3nma$W<%|2eExk=_?K7ioi42~Y<{oCDB$Y$xKOK`$ zBlzOLbEVW^t^n;Z&(H>WaJ>XJ<qMAHeRgrPQqF84vjeA3A~*NXDwFw-17e4WiPcqN z6Fqcplk=tohr3%*5I@g=K_A+u*8+KnhxfTnD29sq9Q%NVdMn9#X1!LJdW`v(I_u{? zz6gmQs$cU8<CT2QM`T3aj%Ct)qq~=r8#eT^bC33Rl5B50DP5#9-G`=}NaJGou)|%s zPimqHXSMBxJ{SFByZ`R?deSejqVE%4W+*xR@tNuSv}i41R4JXtP+J8mXCw78POa)~ z+@YsOMS24-lmsOPI{Q73``(1mQa{bJre$9C)Sht4Q)7mxN6X(<ImFXfwvk;G@sDVu z-5D>VDptWt5XyT=0@?B(l>=+^R<J~0iUp!^N~)_Vt8*zVKfUL9|8<4iNoo-0gjG%{ z#W2ab5vA-`!r_&I6)V};M<tpzD|sS9qNcUc16~K>T>Syma<}$8Bk{39dwnjuh`%Q` z1@lsQVOYP2J{hE5mI(`0${OvSj&Yo$8(Aw`T;+9L&byZYI)_B(-}W`c&o-ho#x%lY zFW$DJ@j~@kzkp9(^MBSb%-6w0;7hj8cg3~y)Sv(g3SU=8-3f&xUU-ax5*$$_Az>RA z|K{k(>n2C^LlY6HkHwr)w&{7KG5hHf3bD-YuNrt#Ue#Dumn`L=GoE3O<SOMB=CFo_ zxlxJXFVx%#G_jj9{=9!4d$_JwkCHX;b&8<E6}zxeDmFLDo_4jPfXtk$WF_(QtBZ3& zVV@RxT!pT8TkCETKJL#ibyU@f+t{Jh3U#XG3-1^y6H+*g6QK>ES(Ude^ugUfP$*c- zdYrVfj9IQQ=&6<;k%}~@AFZ7(9Pj*Q2Vw|oD67}ysXRjcdtZ4}#r?}96fMl$l371~ zIvlii8QR+XeNvuGI>*lv!;7zS3sYS^T9OIhP&&M2kZ7mz9ZB+dq3Kph^t$R`dag_m zw#ii2#_=nzfBb(2yuVyMlXh5E@(#?iFiT23LLvzzWuKX+!l>>njK_rRu*qeVoa@q1 zV&WM2eqp6g*9u#N#+bMY5e0#79Ip9;*6z|QH^&{r`s<0aFe|exh5KAwJVOnhto*p0 zTzHF>KL$82e7pz5bPZ1zd7JvL@1972T{}s%B78)Y&Peh|JFh>2?8zNCb8lPM?YWHa zr@xK8qh68Or7YAX(R6`YEW#1_PeJ(06R-0(3G5DB`T9}wW#~_n6}z`iQq}iM$J}$A zbi26v-I47mcbPC>r&%=cDvy|dKM81G)nL{?2z=!Ar%^ES<C6xo=P!qzGO1Fs8YPjx zuJfi0eNeU$PPZlEz*2pEdXIw71V#4WEwSNpUTQ5Pr;F;jYx2hZ*#h>N`+t-8B8013 zqi7`7XNDEr-aYtmoXo!%#dLX4n>HNPLwG7|K}}FQ*EB1zamo<r)uCDa+En*A%X(b5 z;xfj1e3t#sw2QI4(-zs*mdXaEEXVu{ONqN|dz%-#OPWoMAD}#_U~=Eb^(jED!3&JM zm^HgTC+O~-#MX|qbCw5RyixSVdNO*if5oYaDsyiO#B6#Wzq4sPbou_|B#L~xrSU?c zy@Unekc!^hCcjlby!@Kh%*)moz>(7ScdizlEWokCWpvwx@`fFbrGF?E1EOOxAGmF? znydQ~^6%u!t$Scf<gTmL0L0R5y;S;DBcKd%OUlTmXQui7ZAIG6k*&Rbcs_G@Cvcsi zsz|eCP(j05r*C(s-oGo=^9yvO)}I%WGbn!PMqf)AxVV$@UYQ6b|GAksrA)%+x8*ca zCxeTDk10ZOytQs+W=2Gmyts@7G^@?aQ_|P1yFORi8hJLuwECCdIKH@?Nb}u<;Tg&i z_ulay7e$T}>!*~UbJzR!{FZ!p&Zfp;SJ2K{>J(myN!vLi<-_=;b^kld-$xWpr{l7Q z@K47^YmmA>V{@50?2aqFgyIzuytQ8Q4E{{Q6J}p(Ndc-%ty8*!6_V4N?O6}yxQVmo z{oTgCoidiXK6R2uz3N;R1sIgKwIu4ZCshjg=9cBdzVehN^2Bna44Xr%@N-^DgaT{c zkRxH`{oB|U2L7bO3+OZn`IAO1zUf%sFmZ7D*gVdzN)H0#KL(%1Mja;FOa1cT^O$q_ zY?>yt%WrD`<I6&HNmUiKIrq0KE=J@JUE!^(Vzq8{8zzUmP1X1K$()c0Z8nlwNROn5 zeESwf9X$5<et$!8a<%zIqRiKja(wER%fTqLP%@)p$@Q?5xbaZZ;9}OPu3ELARg9Y1 z7WcTuJ}=G{NhBBNb53HPtIK`%je3qrJhMDoYEjjU(G9zNAtCxIZ=QRnvXc~r=_e9- zsw081oftR*KCD_fa(aBfhercc^CYuynz3GOv!a=|f6{GTpsu>O-`pr`(X#D8lc&Dm z=%*Ues`O!YI*eX9NcHb68?3BfzT~`jf+$5QF{1WdztjlX{KoD{4n~nfpEvqND1&W# z(c=E-P9#pHc*wBQ?K}6()E3_J<f6uF-L|$)*I3@)nH4Q)3u$VajMTtK%V4;#HdkkA zJ@-Uk8AY>bJiRS4eStl&pg!xCb5P3HPWlQh*7I~~I|=Pr;tyK?6bvc97WIsJr=OZo z`eWO@(jJm!#!W&}7B%!o7m<BPt-O2nqm<y5%@M|azkcfijm9=E8m0e8zc1aagG`K# z;vY@s{fbJzz7JBlS%sBj7nZC%cK+E>dzzNb+q1Vc7uVKiwZd#MEb81(PkL^^*SD_C z`{`eGcmI-Gqs*1nWm;b4KG=f3Qdt)BW@7kgV(U@`g=c@Z`FIsHix(XP$OPIYmCZ;` zEGNvZ%QE+To8%;3nUU5arBIa2>PqcsPuo`Y+L9_tlVjtdZJ-P>#?@$RmCk5!kcQ7? zlkDp9`?rWj(FF4-%?Jrtik;r9O^g*j)n8awsQD4wU-pIfW>(Si$&96s6#)tQ;*KM? zkQixuzU|r69i80_aQL78zUkqDreA{psOmj6Cj4(rrzX@!d`x^aeP#TR!vB8wo}Dqc z9j-j$=cGjK!vFibQda2y{c?bq814W5^#At?k_L|v@AaM<7aJDoe=m!VfgU}Hjf6mL zLne1I8;(rF%lmn@&Sier=6C7vuqr1f=Z*_6yg!np{Ed`}34N|oTI2lex@7y7N87Hq z%iDCQ;Xmcz;P{!$tHf4kzl`x;EASHw4HJ_rn~2K}MV<5Z5&{)=Km2Q#^FXT53q3um ziQ+e1Z`s*lG{s~fHJnzK=-$0UXbd`^ry#VVgM-RxW$)I0?L(CjWE28~goHZ>R=e^V z8YCniKY&E1HMbs~5rB~seVd#IJhArlD#s=#yTNMa<CN7OsEmun)LvUTEi@x5e&Jhu znOk4~1^P0+)6-gx0+h0{vY-wExwgFv!{n`wjt(PJQv~Xj%43To%@77^A4x~-!KiDA z^Y%1V+LP*;{>8Q+exGYW7`c^{mM(|+^)RVNNC<Ek7$pifJ+)twgfS#%=__lWqG_gh zxg&R>Ea^xS5c5=fQR1{#_csLprHTxKpQ-BT$OC3NBO@a_I~(!seRqxIp}Ds7=H~pK zdqXN<jcWS@Y^sx?w3DS#;I)ApkZ=v1@jbw$Ix+Jm$_xJc{Vt_fTT6@2b&nbhkNDwt z5%4AifF6AGe<<1(^=t<x%(^@*ZD8Wyh=v=O##ufUCY9A<#dCqya&X{aU|?W#(OT>H zm(b&6i-wgoyrzcF!qRf8((<04pC2s)gJJm;0uu-`R|jW84SKtW<+C<xFiQGuY@<%F z@1g*BYQR%Yj(#LPS2YKcf<G^vmpgA?Ln8&@!CPW6#(buQfsW2$KAi0_wXFy~M-l+q zp`oEki2!a9V!$OcGt-^;%i+Pn>C(q12qQd!ln6YL%P7ic&U;X??A{gvc(brAr^}%L zV$wf4I=W`orbw@$7dWBNmt5!)xwcQ6AqwzY*K0qzyz~tH`0+J34!~Q)efm`9@z3Vr z!-v6PVVA!;j#^vAfqEciWJC+6`0V&&M#l8U#?;_o%pX?i?MHEOM1UU9Pb>TKg~H8l zQ3IAL$^rtWX;GO3x2w$S!r2?}ACF{Ji;HD#LlV5!+SLM*rNZw&S5UYOT|S4`fQJA^ zK{hO~h<QOPo@7~hd9=4PRn}WG)x~{0@p5zsL^#x2NW-P1A}C}%Jq6$RTyZZbXu%?p z${JdmFU(4ij-a67;2<c}c>I~0m$%%0SxQb$&J`vU&Hx?T3`9q^$Q_W}e1xm6UGxSF zUEJLTU;{PvJsxYw&u0dKXK;tX--DWd6GMPs3t_NU&nUoF5jkza^X%Q++$0n67A!aE zf5^v|ppqrU0fL9d%Yzrq&syu?Qq6hn3IW|*1TM0ex3@4780ci@<{m=Xr)S%GwzhI+ zZQD8U4rMO@B(ZRDw;X@kRL91|h=Yc|cv`?|g9wJg^iTH|0|Eofps$`^Pyi6!mgW7o z)iYQ)IEQXtj-Hf9h|7cE;;LzC_8G$>gNyOr-ybfO(bi<?==k`_PCNRdc6Kqxl_mg5 z>FDTmtH`LRew7*b1&4>zF){|PtQeu7pkP?b-@s6m>+zUooe-NWA@n#{R8&-E$IZ>m zs6|AYULNo%8`L&6H4VHQ8ypl>S0{!K_qXhNeJBgeHrtFi2?z;W!^obNXcdCx-|=~p zqjdY$H4WiRGAu|;Ow4909@IH)#d}ZmjDX+lDoABvVS%*!zz{kQ6le_c3C%E%KWUr{ z_#(sB04xU&@B;NbTm1|(+xPb{#0tiGs{nWoJpmbrlB=t$!qz&Co{5Ms2DfoAw_Zp& zmH%B}ZmN6e(UBuaPFhoiJdnU?02wfg3H>I5RCu@UP`rih67b=}ao6fb%#ay^PCXmp z9!9|*)7{-oHN)q9$p?D{VK*VXYHx23waLlc@1><GRNV2jA)x(0s992duHC!=BNmgK z+y~xwA;G~5FubpSbA1J0=~tSF60BW>jmNoTDm+W=I%7XqR#wh!bm=lE9UL89d580u zn%Xxi3LoH5Vf`j;%lmc*E3!P+)9uhYmQqx_<6L)DW&NhkIXvZ=OPS-}VH;E{*xx4Q zP{Zy#%5QqVXFWWTAPkq@W_c7Stsx;H$jz$`Dr#y0BY$amct}V+IfUrx1I<UiI(c{w zXUncT)>6%wrIis=P;9*vjxsneyh?%D?d$7nT`DC-#ZLnrCgt{*r}k8?3&^+_sDpKu z!^8yT7m*2}cCoaww6wI{)!z`Gl~y)Ep5DOFkR!QYQc6lyLqkeg8J|8D3$%sxDez5W z<KsWb<sg)h2Om{qXul{jL<*lXiiwHAyhtGLyk~6M&E*=rgxiq=gznjhVTDw|*NrLM z#=S%cQ+fUJslmUF0Od&A+Oqnpm=Y?UvCf6<&LDhq`Of>S@6E}pT%pqK#~(Xd0j07s zvnRyF%$x~`aIp00HrChIN5JQOX(R&i$;tabcNF~bBe<VGSOwd8A`+6Aw6p<WrFaM( zxD{8-f5pbc++)JS#7u`d@}M@qAv4LWp%Spa1V<Boy9Fcwc7E6SQP$-=@4m?j#@S;` zNR7~^k%<ZDTWwvmi;9aIHK%=!kKy0gc?7lixvFg;j}v88RdG8zcFTz(*ikaxKU;`K zva+&3q_A^n2w~G<dzu^3n}Z{0+Hlqnf8>cyjp(~~?~3OpW+p`1J398kRAg?f{w-Yk z&oWleWaQ;nz%;RId0!c>G{iOR5ARP;UFBZ9K=d+<jg6~Q9=R8Q9SaAL+#xLRd!Dk# z(C)*)!5NDMl8k}^!Vf$%^C80L0?a-4{{7qCkNm#;9?ieSw`(~gFAu9wqYviq_}=}& z4Z1_QWD5Ax>a4H^g1dJ|%oUYhyue9JO!Trj)R>x@5(I!5V$;+l{R4dGBCt*I;A<YA z8F_9l;rh2w&j(tikw7#d0o7+eEXj+)`G0b-IR5_qdoVyB8v?hZ%xP0&czC#$LdC9b z7NQbrxRiv0gG26e-{&U`oScM_UH%;gG*6yHA{Gjure;4scYSa7WVRq7H7QBX!GSX; zC&y~OG39u3!jLmjQhv7?;$&=W8_1Ty21jU|l95A5L?jI`lJiwfNJ>J-L~wi%5fPQZ z`+@_TuUt;;au*Rt-AzayCM7LB{qXPKKf%~f;q~jpdR1;=;ndJjY*?`nRt^}t=Y}mR zVWA=>6d|0gxQXjx;o;>%81P1hyH?UwrOWpD(x-Z6_HROmfmn{}>~YnT`{5X|Ju8P# z1O-8HwY3h5O{c*<J}xefYSY-%^yRBp-6KjOtdS)Zo35<shsWQFi=}f^;r4|qI_(CX zAkF>$z4g+jQmgJu6HfO;{c?Rv1fYqLk&yunwGYPi)g$(h5ySd|L%6-Yy#(CMdi(nF zzJISzen}93{8z8T(Z8j+M86GDP$%WFB4toY-KyGg;r{9arqi&z2=3jRFl_K69APEF z0aRKTId75XF=#4RNwqXJyKb)kH3<t91y5Zm(N<BeAG^bmBnM|N{H6mwE*_qA?g#`J zNvN#v@9#HQ>~=>#+M2DK$o;;|&;kef0Zd(-QWO^!#%s=0RaGID0_3$2QW2$Qu+|KM zE&ap0>jNqzbTTot1IIlB1JVU!2v4><6nukE9&_!+$HWkVs~Cc91An(r>~r-P=}F^h z=4ID4a8_Tct9L+8a>TrmWYC=8xtCW%eOYBr&Ifp1jbgoUxtt|%!fEU>b@agSN6s4R z&Ux{9rL4143QWsFLPM8&;~xtTaJ#;F5JT(acD<0&iP-FjopF72QK#T*J2pK%{qHVZ z$NVP4bCJRL=uRXgv=LcJF*Pu_QoP833Z~nNeEX3t+|TZd3KJtEyS)W5*mXVd6~U2- z^cBa|<=J6^{8t+n2_#!jZ#Y7|NNi<e95o-UJv8|z!a=-90)hIAfD?As5aU2H$}Yp@ z`}ZhPVWf-iaB8x%(R_Sv*zQGjw72h#Yuge~QYwgxqd*Rlo1QM(cpE;R93&iwtpYj5 z(vksSiXTJaBSNoumutcVWYZ8f=hv!U>+92$mX?}v-50(-HC$R+f?dD1F;=j$wpOm+ zh5=a{BJqUXZqO4$cjeV%1lc|W?x$YoM{KsS)fE+k<Kuy27V(=eVkAXHkv@{JW)>DI z6luSCGXM!VVhRLOlx)aPK?ze1)}<78Zruq&-D}LNh_ulv)WF8Uk(HBM0@$lgt)r}7 zx;<Q@rR8N=85z-nv6#ffo*Mh*9oK-?RfnD{7lD+?ZRayVNYk9_W*HVLDk|QVzEUn2 zGpp44Y4Q|~{)5mNrk7v$;4DrqDPf1_3J65)U0qL&y73`QpB;@T?H?W*PFI+}Vj;Oh zDFD(aq0w#DCx9vx&v*;R9wJqB+0{$+Jdi!BfiLA!2nww~kgGs;<R%tIjmzV5e*|)5 z*S(fobvmLX#Kg~SY}i^_S^|QCUh3&VF8%4BKcy8%0}$b$Rq5#Vk)l3C?_!5_JF92m zN)!y&E?Z64LLf;BgT$cB{n+Bj{mM7w?>3y3zs)yLU90K(1_l_oxrrg-D&`tOe!%jo z1PS7vm>4ql2XQ^o$r0|q%*Z5&pwxas0)5#fh@H@O8_N}hfCRTWtpTs4?){h<mviDI zJw1JyQ4it4!9jO#uXypqVZ*LhB!VT|?UVk@Whc9`G9I$-@j`8e8~fSXE`1NeZ(|mv zQ&vc{babWGGdx9antp+g*y~CQVt7{ax;Wu*+E8<wZ$3L*L#Wh2h3nIG*yG-3P#Oh! z%}P&foxIh*o!QOu;uU~g<2J*d7U<`HCy;`4puulCkeUN4gQ~}R!v5}dKmZzKa;I0j zK9S-X)ZE<h>+5E45AU(*EWl*Rt@=83#AmRb7alKu<0E|-2TwzAo?kz_(NR%>^Z*$i z*AU`cB4Xm`*w{x8=6}3nSkT2UbKN&6()rN}2kc5a4;>wPa(^d0YS{5nKr|}_N`3RQ z%sLPg-FYDV6HGIP{yIXe4g}+Uy<={8>Ougxzwp_MH#StkQ^r}1V(ueIir{2%szZ5& z-?+WQ^>uA^m4Jfcx3R%9@a6^ZQJu?fr%5>?iOqceaV0@u(!l-sb98tf-{C2ptuT-M zZR-m*Gg!XRG*En$rd3D+;}f6p;u7YHASdsmr2nq*I9D+RVdMde7{XG2i~p@N&__gc zEw>nP?nC#!yXQ1TCssQoVOE4FHR3^DfbDJgR?uzLPK92v;$h6W0h|cB-p_tjKZi^Z zwkIgNFN<b+`}=c>igqHJW?w*^s8~||-&h)l(9@@}aI$j(NX&aZk$o_P|NmL3cuDX- fg@^#L#T%pv18RD|(53+-_$T{ZQL;$<?fd@&dd=zF diff --git a/ui-tests/tests/image-diff.spec.ts-snapshots/png-diff-linux.png b/ui-tests/tests/image-diff.spec.ts-snapshots/png-diff-linux.png index 4345c4c37914362e42c394f824dabe22b1be5636..b851fa7d50914af43d20170a0d9474c93a74e859 100644 GIT binary patch literal 46062 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�n8V$E>`=-+)Y{U5oUFeJ8?lY1<h=pS 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 KQXwmu-S{udzcL&E literal 47704 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 diff --git a/ui-tests/tests/rebase.spec.ts b/ui-tests/tests/rebase.spec.ts index 9e8a48fe4..3416182a9 100644 --- a/ui-tests/tests/rebase.spec.ts +++ b/ui-tests/tests/rebase.spec.ts @@ -21,7 +21,9 @@ test.describe('Rebase', () => { await page.getByRole('button', { name: 'Current Branch master' }).click(); // Switch to a-branch - await page.getByRole('button', { name: 'a-branch' }).click(); + await page + .getByRole('listitem', { name: 'Switch to branch: a-branch' }) + .click(); // Hide branch panel await page.getByRole('button', { name: 'Current Branch a-branch' }).click(); From a69504045d2cc2663693c8b5dd56f39829117253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= <fcollonval@gmail.com> Date: Tue, 24 Oct 2023 15:01:32 +0200 Subject: [PATCH 24/24] Update snapshots --- .../jpeg-diff-linux.png | Bin 82791 -> 83525 bytes .../png-diff-linux.png | Bin 46062 -> 47016 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/ui-tests/tests/image-diff.spec.ts-snapshots/jpeg-diff-linux.png b/ui-tests/tests/image-diff.spec.ts-snapshots/jpeg-diff-linux.png index 53be74083cd1e692d5bce43f302cac7b508d0ae5..788a9ae708fb5322b4ca755f3767a5a70fac13c9 100644 GIT binary patch literal 83525 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 literal 82791 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 HQQ-dqRM9M- diff --git a/ui-tests/tests/image-diff.spec.ts-snapshots/png-diff-linux.png b/ui-tests/tests/image-diff.spec.ts-snapshots/png-diff-linux.png index b851fa7d50914af43d20170a0d9474c93a74e859..67727646341c856bdc34a8a58c8074a66bda4885 100644 GIT binary patch literal 47016 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 AAOHXW literal 46062 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�n8V$E>`=-+)Y{U5oUFeJ8?lY1<h=pS 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 KQXwmu-S{udzcL&E